Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.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 右对齐按钮与动态文本_Android_Android Layout - Fatal编程技术网

Android 右对齐按钮与动态文本

Android 右对齐按钮与动态文本,android,android-layout,Android,Android Layout,在我的用户界面中,我有一个带有RelativeLayout的片段。在这个RelativeLayout的底部,我有两个按钮:一个在左边,另一个在右边,它们之间有空白。左边是静态文本(但因为应用程序将被翻译,我不知道它的宽度是多少)。右边的文本可以任意更改 因为我已经有了一个RelativeLayout,所以我开始尝试在RelativeLayout中放置它们,如下所示: <Button android:id="@+id/button_left" android:layout_w

在我的用户界面中,我有一个带有RelativeLayout的片段。在这个RelativeLayout的底部,我有两个按钮:一个在左边,另一个在右边,它们之间有空白。左边是静态文本(但因为应用程序将被翻译,我不知道它的宽度是多少)。右边的文本可以任意更改

因为我已经有了一个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" />
<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将使其始终占据所有剩余宽度。如果文本较短,我希望它的宽度小于此宽度:也就是说,宽度应该是可用宽度和文本宽度中的最小值