我的布局包含4个带有这些id的ImageView:opp11,opp12,opp13,opp14。 我使用以下方法来扩充此布局:
public class FourOptions extends LinearLayout {
public FourOptions(Context context, AttributeSet attrs) {
super(context, attrs);
LayoutInflater layoutInflater = (LayoutInflater)context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
layoutInflater.inflate(R.layout.par_fouroptions_layout, this);
}
我这样做:
fo = new FourOptions(this, null);
l.addView(fo);
l是对我添加上述布局的布局的引用。 一切正常。 我现在尝试添加到另一个视图并将此视图与opp11对齐。我是这样做的:
Root result = new Root(this, results[0], results[1], results[2], 45, -1, false);
//Root is a class that extends RelativeLayout
RelativeLayout.LayoutParams paramsRoot = new RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.WRAP_CONTENT,
RelativeLayout.LayoutParams.WRAP_CONTENT);
paramsRoot.addRule(RelativeLayout.ALIGN_LEFT, fo.findViewById(R.id.opp11).getId());
paramsRoot.addRule(RelativeLayout.ALIGN_RIGHT, fo.findViewById(R.id.opp11).getId());
paramsRoot.addRule(RelativeLayout.ALIGN_TOP, fo.findViewById(R.id.opp11).getId());
paramsRoot.addRule(RelativeLayout.ALIGN_BOTTOM, fo.findViewById(R.id.opp11).getId());
result.setLayoutParams(paramsRoot);
l.addView(result);
结果会添加到屏幕的左上角,就像没有为其分配布局参数一样。 当我尝试将结果与l(主布局)中的视图对齐时,它可以正常工作。这让我相信问题就在于此 fo.findViewById(R.id.opp11).getId()
但我不确定。 我尝试过其他一些方法。都失败了。 我会很感激的建议。
这是par_fouroptions_layout:
<?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="match_parent"
android:orientation="vertical" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<View
android:layout_width="0dp"
android:layout_height="1dp"
android:layout_weight="1" >
</View>
<ImageView
android:id="@+id/opp11"
android:contentDescription="@null"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/rectanglebuttons"
android:gravity="center" />
<View
android:layout_width="0dp"
android:layout_height="1dp"
android:layout_weight="1" >
</View>
<ImageView
android:id ="@+id/opp12"
android:contentDescription="@null"
android:layout_width ="wrap_content"
android:layout_height ="wrap_content"
android:gravity="center"
android:src="@drawable/rectanglebuttons"
/>
<View
android:layout_width="0dp"
android:layout_height="1dp"
android:layout_weight="1" >
</View>
</LinearLayout>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<View
android:layout_width="0dp"
android:layout_height="1dp"
android:layout_weight="1" >
</View>
<ImageView
android:id ="@+id/opp13"
android:contentDescription="@null"
android:layout_width ="wrap_content"
android:layout_height ="wrap_content"
android:gravity="center"
android:src="@drawable/rectanglebuttons"
/>
<View
android:id="@+id/spaceview"
android:layout_width="0dp"
android:layout_height="1dp"
android:layout_weight="1" >
</View>
<ImageView
android:id ="@+id/opp14"
android:contentDescription="@null"
android:layout_width ="wrap_content"
android:layout_height ="wrap_content"
android:gravity="center"
android:src="@drawable/rectanglebuttons"
/>
<View
android:layout_width="0dp"
android:layout_height="1dp"
android:layout_weight="1" >
</View>
</LinearLayout>
答案 0 :(得分:1)
请查看相对布局文档:
http://developer.android.com/guide/topics/ui/layout/relative.html
您所描述的行为正是我在阅读这些文档时所期望的行为。我会密切关注这一行:
RelativeLayout允许子视图指定它们相对于的位置 父视图或彼此(由ID指定)。所以你可以调整两个 右边界的元素,或者在另一个下面制作一个元素 屏幕,居中左侧,依此类推。默认情况下,所有子视图都是 在布局的左上角绘制,因此您必须定义位置 每个视图使用可用的各种布局属性 RelativeLayout.LayoutParams。
不是将结果添加到root
,而是将其添加到fo
,您可能会看到所需的行为。
请注意,这不是树跨越描述,而是“与父级或彼此相关”,这意味着您可以使用参数来定位新视图:与父级(root
相关你的情况)或其子女(of
)。
编辑:你已经为你的fo布局添加了xml,我想我看到了这个问题:
您将op11和op12包装在线性布局中。除了以上关于父母子女或相对布局的子女关系的陈述之外,还有一个问题。
即您想要做的是查看xml中存在的包装器布局。您在该视图上没有id,但是有问题的代码块是:
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<View
android:layout_width="0dp"
android:layout_height="1dp"
android:layout_weight="1" >
</View>
<ImageView
android:id="@+id/opp11"
android:contentDescription="@null"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/rectanglebuttons"
android:gravity="center" />
<View
android:layout_width="0dp"
android:layout_height="1dp"
android:layout_weight="1" >
</View>
<ImageView
android:id ="@+id/opp12"
android:contentDescription="@null"
android:layout_width ="wrap_content"
android:layout_height ="wrap_content"
android:gravity="center"
android:src="@drawable/rectanglebuttons"
/>
<View
android:layout_width="0dp"
android:layout_height="1dp"
android:layout_weight="1" >
</View>
</LinearLayout>
由于此linearLayout是fo
的子项,因此上述问题适用,但是出现了第二个问题。即使您要将视图直接添加到此线性布局,我认为您仍然会在尝试将RelativeLayout规则应用于线性布局时看到问题。将此视图更改为相对布局,相应地进行修改,然后将结果视图添加到此包装器视图中,您应该看到所需内容。