gpt4 book ai didi

android - RelativeLayout 添加规则 "RelativeLayout.LEFT_OF"不起作用

转载 作者:IT老高 更新时间:2023-10-28 23:40:25 29 4
gpt4 key购买 nike

我有一个如下的 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.BELOWRelativeLayout.RIGHT_OF,它们都工作得很好,所以这意味着我没有足够的地方来获取按钮?我试着给更多空间,但还是不行。

我用的是东芝AT100(1280*800)和横向,所以空间够用。测试 belowrightleft 相同。我认为如果我将控件 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());

按钮将正常添加到屏幕,并从屏幕的左上角开始出现。如果没有上面代码中的两行,ButtonListView 将重叠,因为这是 RelativeLayout 对 child 没有任何规则的正常行为.然后,我们显式修改 ListView 的位置,将其移动到右侧(上面代码的最后两行)。

关于android - RelativeLayout 添加规则 "RelativeLayout.LEFT_OF"不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10700273/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com