gpt4 book ai didi

android - 带有动态文本的右对齐按钮

转载 作者:行者123 更新时间:2023-11-30 03:59:49 25 4
gpt4 key购买 nike

在我的用户界面中,我有一个带有 RelativeLayout 的 fragment 。在这个 RelativeLayout 的底部,我有两个按钮:一个应该在左边,另一个在右边,它们之间留有空白。左边的是静态文字(但是因为app要翻译,不知道会是什么宽度)。右边的文字可以任意变化。

因为我已经有一个 RelativeLayout,所以我开始尝试像这样将它们放在 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" />

<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" />

但这有一个问题,如果右侧按钮中的文本太长,它将与左侧按钮重叠。

我接下来尝试通过添加 android:layout_toRightOf="@+id/button_left" 来限制右侧按钮的左侧边缘,但是这样,右侧按钮将始终填充可用宽度。当右侧按钮中的文本较短时,我希望它缩小以在它与左侧按钮之间留出间隙。

接下来我尝试使用 LinearLayout,这样我就可以在按钮上设置 layout_gravity,如下所示:

<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 正确填充了屏幕的宽度,但按钮顽固地停留在它的 friend 旁边。

我也尝试将 android:layout_weight="1" 添加到右侧按钮,但同样,它总是会扩展以填充可用空间。

接下来,我尝试在按钮之间添加一个空 View ,以展开并强制右侧按钮向右移动,如下所示:

<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_width="match_parent" 也会发生这种情况。奇怪的是,增加右侧按钮上的 layout_gravity 会使它变小,直到它适合可用空间,但当然这也会在文本较小时填充空间。

我不敢相信做对这件事这么难。我在 SO 上看到过六个类似的问题,但它们都有简单的解决方法。如果按钮文本是固定的,你可以手动将边距设置为固定宽度。如果展开的小部件是 TextView 而不是 Button,您可以让它展开并使用 android:gravity 将文本移动到小部件内,但是您不能使用按钮来做到这一点,因为背景和边框在屏幕上可见。

最佳答案

事实证明,添加 LinearLayout 是错误的做法。使用 android:layout_toRightOf="@+id/button_left"android:layout_alignParentRight="true" 可以很好地处理 TextView,因为它可以在不改变外观的情况下吸收可用空间。我不需要尝试更改布局,而只需要使用可以扩展以填充可用空间并包含 Button 的东西: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_gravity="right" 将右侧按钮布置在该空间内。

这个答案只增加了一个额外的布局,但如果有人有办法只使用现有的 RelativeLayout 来做到这一点,以尽量减少布局中 ViewGroups 的数量,我会接受它作为解决方案。

关于android - 带有动态文本的右对齐按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12675743/

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