我正在尝试按Android Developers - Creating Reusable UI Components所述创建一些模块化UI元素,遗憾的是我没有得到所需的结果。 文章指出:
您可以覆盖所有布局参数。这意味着任何android:layout_ *属性都可以与标记一起使用。
我的XML代码看起来像这样(相关部分):
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<include android:id="@+id/radio_group"
layout="@layout/radio_buttons"
android:layout_marginTop="75dp"
/>
<include android:id="@+id/player_group"
layout="@layout/player_buttons"
android:layout_alignParentBottom="true"
/>
<EditText android:id="@+id/text_field"
android:singleLine="true"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="Enter Your Login ID:"
android:layout_below="@id/player_group"
/>
以下是第一个包含的布局:
<RadioGroup
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/radio_group"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:layout_marginTop="20dp"
android:layout_marginLeft="20dp"
android:layout_marginBottom="20dp"
>
<RadioButton android:id="@+id/radio01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Song #1"
android:paddingLeft="45dp"
/>
[two more identical buttons]
<TextView android:id="@+id/choice"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="you have selected:"/>
</RadioGroup>
和另一个:
<?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="wrap_content">
<Button android:text="btn01"
android:id="@+id/Button01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
/>
<Button android:text="@+id/Button02"
android:id="@+id/Button02"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
/>
<Button android:text="Start Playing"
android:id="@+id/startPlayerBtn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:onClick="doClick"
/>
</LinearLayout>
不幸的是 - 这会导致所有包含的UI元素在屏幕顶部相互叠加在一起。 EditText元素正确对齐,但所有包含的元素都不会响应任何覆盖的属性。我尝试了许多具有相同非结果的不同的。
注意:我还尝试将android:layout_alignParentBottom="true"
参数放入包含的布局中,认为它可能需要在那里覆盖它,但是得到了相同的非结果。
同样 - marginTop param也没有做任何事情。
所以 - 任何想法我做错了什么?这让我发疯了!
注意:前面有一个问题是关于如何设置包含布局的样式,答案是对可重用UI组件页面的引用。只是想说我已经阅读了这个问题和答案而且没有帮助。
答案 0 :(得分:17)
使用include
时有bug,除非您指定android:layout_width
和android:layout_height
的值,否则包含的布局位置不正确。试试这个:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<include android:id="@+id/radio_group"
layout="@layout/radio_buttons"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="75dp"
/>
<include android:id="@+id/player_group"
layout="@layout/player_buttons"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@id/radio_group"
/>
<EditText android:id="@+id/text_field"
android:singleLine="true"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="Enter Your Login ID:"
android:layout_below="@id/player_group"
/>