2014-11-01 2 views
1

Предположим, у меня есть кнопка и EditText, выровненные на одной высоте (внизу экрана) и разделяющие ширину экрана. Я хочу, чтобы кнопка занимала нужное пространство, а также editText, чтобы покрыть остальную ширину.разделите ширину экрана между элементами в относительной компоновке?

До сих пор я использовал linearLayout, где в этом случае я мог бы разместить эти два элемента в горизонтальном линейном макете, установить вес editText на 1 и с кнопкой на wrap_content, и это должно сработать.

Однако я не могу воспроизвести это поведение с использованием относительной компоновки. Я могу поместить editText в нижней части родителя, а затем установить кнопку справа, но я не знаю, как сделать editText заполнять остальную ширину в отношении пространства кнопки.

Каков правильный способ сделать это?

Edit: это то, что я до сих пор:

<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-код –

+0

@Dilavar редактируется, код включен в настоящее время. – kace91

+0

Кнопка сначала (в формате XML) обтекает ширину содержимого, снизу и справа от родителя (выравнивание). Затем отредактируйте нижний левый родительский (выровняйте) и справа от ширины кнопки 0dp – Selvin

ответ

1

Попробуйте это, совместив кнопку справа от кнопки и настройки width от edittext до match_parent работает отлично для меня.

<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, похоже, заполняет ширину, перекрывающуюся кнопкой.Я могу изменить макет: margin right вручную путем проб и ошибок до тех пор, пока он не будет соответствовать ширине кнопки, но должен быть лучший способ (плюс, что число с жестким кодом, вероятно, не будет работать, когда ширина кнопки изменится на разных языках) – kace91

+1

@ kace91 взгляните на мое обновление. Это будет полезно, если вы в порядке с использованием линейного макета, вложенного в ваш Relative layout. Эта реализация не использует жестко закодированные значения – codePG

+1

Да, я знаю, что это работает, но я старался избегать макетов вложенности, поскольку я читал, что это означает, что у вас есть успех. Во всяком случае, я нашел решение, которое работает без вложенности, я разместил его как отдельный ответ, если вы хотите его проверить. Все равно, спасибо за помощь! – kace91

0

Я нашел решение сам. Трюк состоял в том, чтобы установить оба элемента внизу, затем отредактировать текст по ширине: 0dp, alignParentLeft и toLeftOF кнопку (NOT alignLeft кнопки, но 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" /> 
Смежные вопросы