Search code examples
androidxmldrawableshapes

Android Drawable: Specifying shape width in percent in the XML file?


I'm trying to create a simple Drawable that I want to set as the background for a view (using setBackgroundDrawable). I simply want to divide the background of the drawable into 2 equal rectangles (50% - 50%), the first want filled with black, the second with white:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/back_color_1">
        <shape android:shape="rectangle">
          <solid android:color="#000000" />
        </shape>
    </item>
    <item android:id="@+id/back_color_2">
        <shape android:shape="rectangle">
          <solid android:color="#FFFFFF" />
        </shape>
    </item>
</layer-list>

How can I specify that each shape should have a width of 50% in the drawable XML definition file? Something like android:width="50%".

(I'm working on Android 3.0, but I think it is a general Android question.)

P.S: You can do this in CSS or XAML.


Solution

  • You can't specify a percentage. You need to specify a Dimension value to it.

    android:width is defined here: http://developer.android.com/reference/android/R.attr.html#width :

    (emphasis mine)

    Must be a dimension value, which is a floating point number appended with a unit such as "14.5sp". Available units are: px (pixels), dp (density-independent pixels), sp (scaled pixels based on preferred font size), in (inches), mm (millimeters).

    For a definition of each dimension type, see: http://developer.android.com/guide/topics/resources/more-resources.html#Dimension

    You will need to create your own attribute (see styleable) and perform the calculations yourself in onDraw(...).

    See these two questions and the links therein for examples: