在相对布局中划分元素之间的屏幕宽度?

问题描述:

比方说,我有一个按钮和一个EditText,它们在同一高度(屏幕底部)对齐并共享屏幕宽度。我希望按钮只占用它所需的空间,editText用于覆盖其余的宽度。在相对布局中划分元素之间的屏幕宽度?

到目前为止,我一直在使用linearLayout,在这种情况下,我可以将这两个元素放在一个水平线性布局中,将editText的权重设置为1,将按钮的权重设置为wrap_content,会工作。

但是,我无法使用相对布局复制此行为。我可以将editText放在父级的底部,然后将按钮设置到其右侧,但我不知道如何使editText填充按钮空间的其余宽度。

什么是正确的做法呢?

编辑:这是我到目前为止有:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 



    <EditText 
     android:id="@+id/edittext" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:hint="@string/editText_Hint" 
     android:inputType="number" /> 


    <Button 
     android:id="@+id/button" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:layout_alignRight="@id/edittext" 
     android:onClick="sendAnswer" 
     android:text="@string/button_text" /> 

</RelativeLayout> 

而且我想复制这种行为:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 

    /*other stuff here*/ 

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal"> 


     <EditText 
      android:id="@+id/edittext" 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:hint="@string/editText_Hint" 
      android:inputType="number" 
      android:layout_weight="1" 
      /> 


     <Button 
      android:id="@+id/button" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="@string/button_text" 
      android:onClick="sendAnswer"/> 
    </LinearLayout> 
</LinearLayout> 
+0

请把你的XML代码 – 2014-11-01 12:39:34

+0

@Dilavar编辑的代码现在。 – kace91 2014-11-01 12:44:14

+0

首先按钮(以XML格式)宽度包装内容,父母的底部和右侧(对齐)。下一步编辑左下角父母(对齐)和按钮宽度0dp – Selvin 2014-11-01 12:44:47

试试这个,对齐按钮和设置按钮右侧edittextmatch_parentwidth适合我。

<RelativeLayout 
    android:id="@+id/relativeLayout1" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" > 

    <Button 
     android:id="@+id/button1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Button" /> 

    <EditText 
     android:id="@+id/editText1" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_toRightOf="@+id/button1" 
     android:ems="10" > 

     <requestFocus /> 
    </EditText> 
</RelativeLayout> 

这样做edittext看起来好像走到了边界。为了有更好的外观效果的属性添加一定的余量给edittext右侧android:layout_marginRight="5dp"

UPDATE

如果你的要求是使用父布局为Relative Layout,供您使用嵌套的最佳解决方案布局。

使用嵌套在相对布局中的LinearLayout,其对齐android:layout_alignParentBottom="true"与LinearLayout对齐。

样品如下,

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 

    <LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" > 

     <EditText 
      android:id="@+id/editText1" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:ems="10" > 

      <requestFocus /> 
     </EditText> 

     <Button 
      android:id="@+id/button1" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="Button" /> 

    </LinearLayout> 

</RelativeLayout> 
+0

这是迄今为止我所得到的最佳解决方案,但我仍然不喜欢这种方式,正如您所说,editText似乎正在填充与按钮重叠的宽度。我可以通过试验和错误手动更改布局:边距,直到它匹配按钮的宽度,但必须有更好的方法(当按钮的宽度在不同的语言中更改时,加硬编码的数字可能不起作用) – kace91 2014-11-01 12:59:18

+1

@ kace91看看我的更新。如果您可以使用嵌套在相对布局中的线性布局,那将会很有帮助。这个实现不使用硬编码的值 – codePG 2014-11-01 13:20:59

+1

是的,我知道这是有效的,但我试图避免嵌套布局,因为我认为这意味着在性能上受到打击。无论如何,我找到了一个解决方案,无需嵌套,我发布它作为一个单独的答案,以防你想检查它。无论如何感谢您的帮助! – kace91 2014-11-01 14:20:38

我找到了解决自己。诀窍是在底部设置两个元素,然后将编辑文本设置为宽度:0dp,alignParentLeft和toLeftOF按钮(不是按钮的左对齐,而是左对齐按钮)。该按钮应该与父母权利和父母权利对齐。

最终的代码如下所示:

<EditText 
     android:id="@+id/edittext" 

     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:layout_toLeftOf="@id/button" 
     android:layout_alignParentLeft="true" 
     android:hint="@string/editText_Hint" 
     android:inputType="number" 
     android:layout_width="0dp" 
     > 

    <Button 
     android:id="@+id/button" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:layout_alignParentRight="true" 
     android:onClick="sendAnswer" 
     android:text="@string/button_text" />