android - 引用膨胀布局中的 View

标签 android android-layout android-inflate

我有一个包含 4 个 ImageView 的布局,这些 id 为: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 是对我添加上述布局的布局的引用。 这一切都很好。 我现在尝试向 l 添加另一个 View 并将此 View 与 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);

result 被添加到屏幕的左上角,就像没有分配布局参数一样。 当我尝试将结果与主布局 l 中的 View 对齐时,它起作用了。这让我相信问题出在 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>

最佳答案

请查看相关布局文档:

http://developer.android.com/guide/topics/ui/layout/relative.html

您所描述的行为正是我阅读这些文档时所期望的行为。我会在这一行输入:

RelativeLayout lets child views specify their position relative to the parent view or to each other (specified by ID). So you can align two elements by right border, or make one below another, centered in the screen, centered left, and so on. By default, all child views are drawn at the top-left of the layout, so you must define the position of each view using the various layout properties available from RelativeLayout.LayoutParams.

不要将结果添加到 root,而是将其添加到 fo,您可能会看到所需的行为。

请注意,这不是树生成描述,而是“相对于父级或彼此”,这意味着您可以使用参数来定位新 View :相对于父级(root 在你的情况下)或其 child ( of )。

编辑:您已经为 fo 布局添加了 xml,我想我看到了问题:

您将 op11 和 op12 包装在线性布局中。除了上面关于相对布局的父子关系或子子关系的陈述之外,这里还有一个问题。

也就是说,您要做的是将一个 View 添加到存在于您的 xml 中的包装器布局中。您在该 View 上没有 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 的子级,所以上述问题适用,但是会出现第二个问题。即使您将 View 直接添加到此线性布局,我认为您在尝试将 RelativeLayout 规则应用于线性布局时仍然会遇到问题。将此 View 更改为相对布局,进行相应修改,然后将您的结果 View 添加到此包装器 View 中,您应该会看到您想要的内容。

关于android - 引用膨胀布局中的 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27804633/

相关文章:

android - 从我的 URL 解析 JSON 数据时出错

android - favicon.ico 有没有用于移动网站?

android - 从字符串路径创建位图

android - Gradle 找不到模块依赖的传递依赖

android - 嵌套权重与带权重的嵌套布局。哪个更好?

android - 如果在底部,ExpandableListView 不会滚动

java - Android Studio - 如何删除布局上方的空白

android - 膨胀 View 没有捕获 onClick 事件

android - 膨胀Relativelayout Android