Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/54.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 预订a";槽;在动态创建的按钮的布局XML文件中?_Android_Android Layout - Fatal编程技术网

Android 预订a";槽;在动态创建的按钮的布局XML文件中?

Android 预订a";槽;在动态创建的按钮的布局XML文件中?,android,android-layout,Android,Android Layout,在我的应用程序中,我有一个(而且只有一个)在XML布局文件中没有引用的UI元素 该元素是一个按钮,由第三方库在运行时实例化并返回(即,我无法控制该按钮) 我的问题是,我希望使用RelativeLayout将XML布局文件中的一些元素(textView)放置在相对于按钮的位置 是否可以在XML布局文件中为该按钮“保留一个空槽”,以便我可以执行以下操作 <TextView android:id="@+id/tv_text_under_button" android:la

在我的应用程序中,我有一个(而且只有一个)在XML布局文件中没有引用的UI元素

该元素是一个按钮,由第三方库在运行时实例化并返回(即,我无法控制该按钮)

我的问题是,我希望使用
RelativeLayout
将XML布局文件中的一些元素(textView)放置在相对于按钮的位置

是否可以在XML布局文件中为该按钮“保留一个空槽”,以便我可以执行以下操作

    <TextView android:id="@+id/tv_text_under_button"
        android:layout_width="match_parent" 
        android:layout_height="wrap_content"
        android:layout_below="@+id/btn_dynamically_created_button"
        android:text="" />
我应该用什么来代替动态创建的按钮
R.id.btn\u

更新:感谢下面的答案,我创建了这样一个占位符:

    <LinearLayout android:id="@+id/btn_dynamically_created_button"
    android:orientation="vertical"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" >
    </LinearLayout>

现在的挑战是:如何将getDynamicallyCreatedButton()返回的对象(返回的对象是
LinearLayout
,而不是
Button
)与
R.id.btn\u动态创建的\u按钮
关联

编辑:似乎解决了类似的问题,但我不确定我是否理解提供的解决方案。

我建议:

  • 将宽度/高度设置为环绕内容、水平方向和零填充的线性布局作为占位符
  • 将所有其他对象定向到该线性布局
  • 当该按下按钮时,只需将其插入线性布局即可
  • 看看这对你是否有效

    编辑:尝试一个简短的示例:

    布局(适当缩短):可以相对于id为LinearLayout01的LinearLayout放置其他构件


    你能提供一个简短的代码示例吗?我很难想象没有真实的R.id我怎么能“坚持下去”。谢谢+1.编辑我的回复,以包含5分钟的样本。有点难看,但抓住了本质。这非常有效,谢谢!另加一个+1并接受。:)顺便说一句,我试图通过调用b.setId(R.id.btn_动态创建_按钮)来“欺骗”系统,但由于某种原因,它对我无效。即使它有效,您的解决方案也更加优雅,可能更安全。很高兴知道它有效。设置ID的问题是,如果您使用的是XML布局文件,那么如果不能同时实例化所有视图对象,LayoutInflater将不知道该怎么做。如果你在代码中设置整个程序,那么这可能会很好。
        <LinearLayout android:id="@+id/btn_dynamically_created_button"
        android:orientation="vertical"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" >
        </LinearLayout>
    
    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_marginTop="2sp" android:layout_marginBottom="2sp" android:layout_height="wrap_content">
            <LinearLayout android:id="@+id/LinearLayout01" android:layout_height="wrap_content" android:layout_width="wrap_content" android:gravity="right" style="@style/SimpleButtonBar" android:layout_below="@+id/rootlayout" android:layout_alignParentBottom="true">
            </LinearLayout>
            <ScrollView android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_alignParentTop="true" android:layout_above="@+id/LinearLayout01" android:fillViewport="true">
                    <RelativeLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:id="@+id/detaillayout">
            </RelativeLayout>
        </ScrollView>
    </RelativeLayout>
    
    LinearLayout l = (LinearLayout)findViewById(R.id.LinearLayout01);
    LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
    l.addView(b, lp);