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.
Ответы
Ответ 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>