Android 右对齐按钮与动态文本
在我的用户界面中,我有一个带有RelativeLayout的片段。在这个RelativeLayout的底部,我有两个按钮:一个在左边,另一个在右边,它们之间有空白。左边是静态文本(但因为应用程序将被翻译,我不知道它的宽度是多少)。右边的文本可以任意更改 因为我已经有了一个RelativeLayout,所以我开始尝试在RelativeLayout中放置它们,如下所示:Android 右对齐按钮与动态文本,android,android-layout,Android,Android Layout,在我的用户界面中,我有一个带有RelativeLayout的片段。在这个RelativeLayout的底部,我有两个按钮:一个在左边,另一个在右边,它们之间有空白。左边是静态文本(但因为应用程序将被翻译,我不知道它的宽度是多少)。右边的文本可以任意更改 因为我已经有了一个RelativeLayout,所以我开始尝试在RelativeLayout中放置它们,如下所示: <Button android:id="@+id/button_left" android:layout_w
<Button
android:id="@+id/button_left"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:text="@string/left" />
<Button
android:id="@+id/button_right"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:text="@string/right" />
<LinearLayout
android:id="@+id/buttons"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true" >
<Button
android:id="@+id/button_left"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/left" />
<Button
android:id="@+id/button_right"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right"
android:drawableLeft="@drawable/pass"
android:text="@string/right" />
</LinearLayout>
<LinearLayout
android:id="@+id/buttons"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true" >
<Button
android:id="@+id/button_right"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/left" />
<View
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_weight="1" />
<Button
android:id="@+id/button_left"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right"
android:text="@string/right" />
</LinearLayout>
还是没有快乐。我原以为这会起作用,但右侧按钮只停留在左侧按钮的右侧,而不是粘在屏幕的右边缘。我可以在布局编辑器中看到LinearLayout正确地填充了屏幕的宽度,但是按钮顽固地停留在它的朋友旁边
我也尝试在右边的按钮上添加了android:layout\u weight=“1”
,但同样,它总是会扩展以填满可用空间
接下来,我尝试在按钮之间添加一个空视图,以展开并强制右按钮向右,如下所示:
<Button
android:id="@+id/button_left"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:text="@string/left" />
<Button
android:id="@+id/button_right"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:text="@string/right" />
<LinearLayout
android:id="@+id/buttons"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true" >
<Button
android:id="@+id/button_left"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/left" />
<Button
android:id="@+id/button_right"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right"
android:drawableLeft="@drawable/pass"
android:text="@string/right" />
</LinearLayout>
<LinearLayout
android:id="@+id/buttons"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true" >
<Button
android:id="@+id/button_right"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/left" />
<View
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_weight="1" />
<Button
android:id="@+id/button_left"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right"
android:text="@string/right" />
</LinearLayout>
当文本较短时,这很好,就像我原来的RelativeLayout一样,但现在当右侧按钮上的文本较长时,其宽度受屏幕宽度的限制,而不是可用空间的限制,因此它会延伸到屏幕的右侧边缘。同样,我可以在布局编辑器中看到LinearLayout具有正确的宽度,但是按钮正在扩展其父级边界。即使按钮具有android:layout\u width=“match\u parent”,也会发生这种情况。奇怪的是,增加右侧按钮上的布局重力会使它变小,直到它适合可用空间,但当然这也会使它在文本变小时填充空间
我真不敢相信要做到这一点这么难。我见过半打类似的问题,但它们都有简单的解决办法。如果按钮文本是固定的,可以手动将边距设置为固定宽度。如果展开的小部件是文本视图而不是按钮,您可以让它展开并使用
android:gravity
在小部件内移动文本,但您不能使用按钮,因为背景和边框在屏幕上是可见的。您可以使用文本视图并使其看起来像按钮。创建一个虚拟按钮,提取背景并以编程方式将该背景设置为文本字段。
(未测试,但应具有按钮的外观)
然后,您只需设置onClickListener,这将产生您想要的结果。文本视图将取代第一个布局中的“按钮右键”
**编辑
您的xml看起来像这样
<Button
android:id="@+id/button_left"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:text="@string/left" />
<TextView
android:id="@+id/button_right"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:maxEms="10"
android:text="TextView" />
您可以使用文本视图,使其看起来像一个按钮。创建一个虚拟按钮,提取背景并以编程方式将该背景设置为文本字段。 (未测试,但应具有按钮的外观) 然后,您只需设置onClickListener,这将产生您想要的结果。文本视图将取代第一个布局中的“按钮右键” **编辑 您的xml看起来像这样
<Button
android:id="@+id/button_left"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:text="@string/left" />
<TextView
android:id="@+id/button_right"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:maxEms="10"
android:text="TextView" />
事实证明,添加线性布局是错误的方法。使用
android:layout\u toRightOf=“@+id/button\u left”android:layout\u alignParentRight=“true”
可以很好地处理文本视图,因为这样可以在不改变外观的情况下占用可用空间。与其尝试更改布局,我只需要使用一些可以扩展以填充可用空间并包含按钮的内容:FrameLayout。下面是工作代码,它仍然在我的根RelativeLayout中:
<Button
android:id="@+id/button_left"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:text="@string/left" />
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_toRightOf="@+id/button_left" >
<Button
android:id="@+id/Turn_button_pass"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right"
android:text="@string/right" />
</FrameLayout>
现在,FrameLayout总是占据左侧按钮右侧的所有空间,并使用android:layout\u gravity=“right”
将右侧按钮放置在该空间内
这个答案只添加了一个额外的布局,但如果有人有办法只使用现有的RelativeLayout来实现这一点,以最小化布局中的视图组数量,我将接受这一解决方案。事实证明,添加LinearLayout是错误的方法。使用
android:layout\u toRightOf=“@+id/button\u left”android:layout\u alignParentRight=“true”
可以很好地处理文本视图,因为这样可以在不改变外观的情况下占用可用空间。与其尝试更改布局,我只需要使用一些可以扩展以填充可用空间并包含按钮的内容:FrameLayout。下面是工作代码,它仍然在我的根RelativeLayout中:
<Button
android:id="@+id/button_left"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:text="@string/left" />
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_toRightOf="@+id/button_left" >
<Button
android:id="@+id/Turn_button_pass"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right"
android:text="@string/right" />
</FrameLayout>
现在,FrameLayout总是占据左侧按钮右侧的所有空间,并使用android:layout\u gravity=“right”
将右侧按钮放置在该空间内
这个答案只增加了一个额外的布局,但如果有人想办法只使用现有的RelativeLayout来减少布局中的视图组数量,我将接受这一解决方案。如果你能接受这个限制,右键最多只能占用一半的可用空间,这可能是您的解决方案:
如果您可以接受右按钮最多只能占用一半可用空间的限制,这可能是您的解决方案:
如果我理解正确,我会有一个线性布局,其中有两个按钮的内容宽度为wrap_,动态布局的权重为1,或者使用minWidth参数与您上次使用的解决方案tried@njzk2重量1将使其始终占据所有剩余宽度。如果文本较短,我希望它的宽度小于此宽度:也就是说,宽度应该是可用宽度和文本宽度中的最小值