Я хочу установить ширину LinearLayout
на половину ширины экрана динамически в моей инициализации пользовательского интерфейса. У меня есть RelativeLayout
, обернутый вокруг LinearLayout
, иерархия такова:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<LinearLayout
android:id="@+id/left_linear_layout"
android:layout_alignParentLeft="true"
android:layout_height="fill_parent"
android:layout_width="155dp" <!--want to set this to 1/2 screen width-->
android:orientation="vertical">
...
</LinearLayout>
<LinearLayout
android:id="@+id/right_linear_layout"
android:layout_alignParentRight="true"
android:layout_height="fill_parent"
android:layout_width="385dp"><!--want to set this relative to screen width as well-->
....
</LinearLayout>
</RelativeLayout>
В качестве альтернативы, можно ли решить эту проблему с помощью View
вместо Layout
? Любое предложение приветствуется!
Вы можете сделать это, используя layout_weight
, но вам нужно добавить некоторые невидимые виды для заполнения. Например, следующая верхняя панель уменьшит ширину экрана:
<RelativeLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android">
<LinearLayout
android:id="@+id/left_linear_layout"
android:layout_alignParentLeft="true"
android:layout_height="fill_parent"
android:layout_width="0dp"
android:layout_weight="1"
android:orientation="vertical"
>
...
</LinearLayout>
<!-- need this view to fill the other half of the screen -->
<View
android:id="@+id/spacer"
android:layout_toRightOf="@id/left_linear_layout"
android:layout_height="fill_parent"
android:layout_width="0dp"
android:layout_weight="1"
/>
....
</RelativeLayout>
Сумма каждого вида займет layout_weight/total_layout_weight
. В этом случае total_layout_weight = 1+1 = 2
, и каждый вид имеет layout_weight
1, поэтому каждый вид занимает 1/2
экрана.
Вы можете просто использовать LinearLayout в качестве макета верхнего уровня, а затем установить вес двух дочерних макетов.