Android Drawable: указать ширину фигуры в процентах в файле XML - PullRequest
24 голосов
/ 19 мая 2011

Я пытаюсь создать простой Drawable, который я хочу установить в качестве фона для представления (используя setBackgroundDrawable ).Я просто хочу разделить фон рисованного элемента на 2 равных прямоугольника (50% - 50%), первый из которых будет заполнен черным, а второй - белым:

<?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>

Как указать, что каждая фигурадолжна иметь ширину 50% в файле определения XML для рисования?Что-то вроде android: width = "50%" .

(я работаю на Android 3.0, но думаю, что это общий вопрос для Android.)

PS: Вы можете сделать это в CSS или XAML.

Ответы [ 5 ]

10 голосов
/ 19 мая 2011

Нельзя указывать процент .Вам необходимо указать значение измерения для него.

android:width определено здесь: http://developer.android.com/reference/android/R.attr.html#width:

(выделено мое)

Должно быть размерным значением , который является числом с плавающей запятой, с добавлением единицы, такой как "14.5sp".Доступные единицы измерения: px (пиксели), dp (пиксели, не зависящие от плотности), sp (масштабированные пиксели на основе предпочтительного размера шрифта), дюймы (дюймы), мм (миллиметры).

Определение каждого типа измерения см. В http://developer.android.com/guide/topics/resources/more-resources.html#Dimension

. Вам потребуется создать собственный атрибут (см. styleable ) и выполнить вычисления.себя в onDraw(...).

См. эти два вопроса и ссылки в них для примеров:

3 голосов
/ 04 марта 2013

android: layout_weight = ". 20" - лучший способ реализовать в процентах

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
    android:id="@+id/logTextBox"
    android:layout_width="fill_parent"
    android:layout_height="0dp"
    android:layout_weight=".20"
    android:maxLines="500"
    android:scrollbars="vertical"
    android:singleLine="false"
    android:text="@string/logText" >
</TextView>

</LinearLayout>
3 голосов
/ 19 мая 2011

Истинное процентное значение не задано, но вы можете приблизиться.

кажется, что самый простой способ добиться этого - использовать изображение в качестве фона для рисования и просто разделить черно-белое изображение.

единственный другой способ, которым я знаю, что разделить что-либо, это использовать 2 вида, каждый из которых имеет свой собственный цвет bg, и каждому дается одинаковое положительное значение для атрибута android: layout_weight (т. Е. 50/50). затем они разделят доступное пространство.

надеюсь, это поможет!

2 голосов
/ 11 октября 2011

Я нашел способ сделать это, создав собственный класс, унаследованный от RelativeLayout, где я переопределил метод onMeasure. На этом этапе высота представления известна, поэтому я выбрал фон и вручную установил вставку элементов, используя setLayerInset .

    LayerDrawable bg = (LayerDrawable)getBackground();
    int h = getMeasuredHeight();
    bg.setLayerInset(1, 0, 0, 0, h/2);

Хотя этот метод немного громоздок. В большинстве случаев ответ, предоставленный Крисом, должен быть достаточным.

0 голосов
/ 03 июля 2013

Лучший способ, как заявил swapnil, это использовать layout_weight в LinearLayout. Если вы идете по горизонтали, установите layout_width на «fill_parent», а затем установите layout_weight в процентах, которые вы хотите. Начните с того, что показано ниже, и поэкспериментируйте со значениями layout_width, чтобы почувствовать это (или добавьте больше видов просто для лучшего понимания).

<LinearLayout    
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      android:orientation = "horizontal" >

    <View
      android:layout_width="fill_parent"
      android:layout_height="30dip"
      android:layout_weight="0.5"
      android:background="#aaffaa" />
    <View
      android:layout_width="fill_parent"
      android:layout_height="30dip"
      android:layout_weight="0.5"
      android:background="#aaaaff" />
</LinearLayout>
...