- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我有一个如下的 relativeLayout:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal"
android:id="@+id/parent" >
<ListView
android:layout_width="360dp"
android:layout_height="600dp"
android:id="@+id/list"
android:inputType="text"
android:maxLines="1"
android:layout_margin="50dp"
android:layout_alignParentRight="true"
/>
</RelativeLayout>
在java代码中,我想在listview的左边添加一个view,但是没有成功:
m_relativeLayout = (RelativeLayout)findViewById(R.id.parent);
RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
layoutParams.addRule(RelativeLayout.LEFT_OF, m_listView.getId());
Button button2 = new Button(this);
button2.setText("I am button 2");
m_relativeLayout.addView(button2, layoutParams);
只有当我将 ListView 设置为 alignParentRight 时,它才会起作用。这是一个android错误还是我错过了什么?
我总是尝试 addView(View child, int index, LayoutParams params)
,但它可能只适用于线性布局。那么是否有正常的解决方案可以让 RelativeLayout.LEFT_OF
工作?
编辑
我试过 RelativeLayout.BELOW
和 RelativeLayout.RIGHT_OF
,它们都工作得很好,所以这意味着我没有足够的地方来获取按钮?我试着给更多空间,但还是不行。
我用的是东芝AT100(1280*800)和横向,所以空间够用。测试 below
和 right
与 left
相同。我认为如果我将控件 A 放在相对布局中,那么我添加控件 B 并将其声明在控件 A 的左侧,结果应该是控件 B 将控件 A 推到其右侧,对吧?
最佳答案
I think If i put an control A in the relativelayout, then i add control B and declare it's on the left of the control A, the result should be the control B will push the control A to its right, right?
您的假设不正确,除非您使用 RelativeLayout.LayoutParams
规则指定,否则控件 A 不会被推到右侧。 RelativeLayout
如果您没有为它们指定放置规则,则从屏幕的左上角开始将它们的子元素一个接一个地放置。当您将 View
A 添加到 RelativeLayout
没有任何规则(如 layout_alignParentRight
)时,它将从左上角开始放置屏幕。然后,当您添加 View
B 时,规则 to_leftOf
将应用于此 View
位置,但此规则对 View
将在屏幕上保持其位置的人。这将使 View
B 位于 View
A 的左侧,但在屏幕之外,因为 View
A 的边界从左边框开始屏幕。
当您使用 layout_alignParentRight="true"
时,Button
将放置在 ListView
的左侧,因为现在有空间来实际查看 Button
(它不在外面了)。 addView(View child, int index, LayoutParams params)
在 LinearLayout
中工作,因为 LinearLayout
将其子项排列在一行或一列中(取决于方向)所以当您在特定位置添加 View
时,它会将其后的其他 Views
推到右侧或下方(取决于方向)(没有相对LinearLayout
中的 View 定位,唯一的规则是 child 一个接一个地出现)。
从 ListView
开始,没有设置任何规则,下面是一个示例,说明如何使 Button
出现在 ListView< 的左侧
:
RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
Button button2 = new Button(this);
button2.setText("I am button 2");
button2.setId(1000);
m_relativeLayout.addView(button2, layoutParams);
RelativeLayout.LayoutParams rlp = (RelativeLayout.LayoutParams) m_listView
.getLayoutParams();
rlp.addRule(RelativeLayout.RIGHT_OF, button2.getId());
按钮将正常添加到屏幕,并从屏幕的左上角开始出现。如果没有上面代码中的两行,Button
和 ListView
将重叠,因为这是 RelativeLayout
对 child 没有任何规则的正常行为.然后,我们显式修改 ListView
的位置,将其移动到右侧(上面代码的最后两行)。
关于android - RelativeLayout 添加规则 "RelativeLayout.LEFT_OF"不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10700273/
我有一个如下的 relativeLayout: 在java代码中,我想在listview的左边添加一个view,但是没有成功: m_relativeLayout = (RelativeL
在本书中,我们被要求使用以下布局定义谓词 left_of、right_of、above 和 below。 % bike camera % pencil hourglass
我是一名优秀的程序员,十分优秀!