Подтвердить что ты не робот

Android Drawable: определение ширины формы в процентах в файле XML?

Я пытаюсь создать простой 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.)

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

4b9b3361

Ответ 1

Нельзя указать процент. Вам нужно указать значение Dimension.

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(...).

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

Ответ 2

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

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

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

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

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

Ответ 4

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

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

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

Ответ 5

Лучший способ, как сказал 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>