2013-11-08 3 views
1

Я хочу поместить в ту же строку TextView и Edittext и кнопку, но у меня возникла проблема, что кнопка не выровнена правильно слева и на маленьких экранах.Set Textview + Edittext + Button

Малый экран: enter image description here

Большой экран: enter image description here

Мой кодификация выглядит следующим образом:

<LinearLayout 
     android:id="@+id/layout1" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal" > 

     <TextView 
      android:id="@+id/address_textview" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:gravity="center" 
      android:text="@string/address_textview" 
      android:textStyle="bold" /> 

     <EditText 
      android:id="@+id/address_edittext" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:hint="@string/address_textview_hint" 
      android:imeActionLabel="@string/search_button" 
      android:imeOptions="actionDone" 
      android:inputType="textCapWords" 
      android:nextFocusDown="@id/address_edittext" 
      android:nextFocusUp="@id/address_edittext" 
      android:singleLine="true" /> 

     <RelativeLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal" 
     android:gravity="right" > 
     <Button 
      android:id="@+id/go_button" 
      android:layout_width="50dp" 
      android:layout_height="35dp" 
      android:text="Go" /> 
       </RelativeLayout> 

    </LinearLayout> 

ответ

4

Во-первых, многие люди скажут вам, что hint это решение Андроида для не требующей метки. Меня не волнует, если вы используете ярлык или нет, но это экономит ваше место, особенно на небольших экранах. Это был только FYI.

Теперь ваш RelativeLayout, который имеет только Button, кажется бесполезным ... Я бы удалил это. Вы можете использовать layout_weight так, чтобы каждый View занимал соответствующее пространство. Обязательно сделайте layout_width="0dp". Так что это может выглядеть как

<LinearLayout 
    android:id="@+id/layout1" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal" > 

    <TextView 
     android:id="@+id/address_textview" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="2" 
     android:gravity="center" 
     android:text="@string/address_textview" 
     android:textStyle="bold" /> 

    <EditText 
     android:id="@+id/address_edittext" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="3" 
     android:hint="@string/address_textview_hint" 
     android:imeActionLabel="@string/search_button" 
     android:imeOptions="actionDone" 
     android:inputType="textCapWords" 
     android:nextFocusDown="@id/address_edittext" 
     android:nextFocusUp="@id/address_edittext" 
     android:singleLine="true" /> 

    <Button 
     android:id="@+id/go_button" 
     android:layout_width="0dp" 
     android:layout_height="35dp" 
     android:layout_weight="1" 
     android:text="Go" /> 

</LinearLayout> 

Здесь я использовал 2,3,1 для weights из ваших TextView, EditText и Button соответственно. Возможно, вам придется изменить их, чтобы получить именно то, что вы хотите, но это должно дать вам начало.

1

я буду считать, что вы имеете в виду кнопка не выровнен к правильно.

Это потому, что ваш RelativeLayout's android:width="wrap_content", но он должен быть android:width="match_parent".

Кроме того, вам было бы лучше настроить android:width="0dp" EditText и добавить android:weight="1", чтобы он расширял/сокращал между размерами экрана.

6

Примените вес к вашему EditText, чтобы он занимал столько места, сколько может, позволяя другим двум элементам выполнять обычный wrap_content. Чтобы сделать это, удалите относительный контейнер макета, а затем изменить ширину EditText на «0dp» и дать ему layout_weight из «1» в следующей редакции:

<LinearLayout 
    android:id="@+id/layout1" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal"> 

    <TextView 
     android:id="@+id/address_textview" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:gravity="center" 
     android:text="@string/address_textview" 
     android:textStyle="bold" /> 

    <EditText 
     android:id="@+id/address_edittext" 
     android:layout_width="0dp" 
     android:layout_weight="1" 
     android:layout_height="wrap_content" 
     android:hint="@string/address_textview_hint" 
     android:imeActionLabel="@string/search_button" 
     android:imeOptions="actionDone" 
     android:inputType="textCapWords" 
     android:nextFocusDown="@id/address_edittext" 
     android:nextFocusUp="@id/address_edittext" 
     android:singleLine="true" /> 

    <Button 
     android:id="@+id/go_button" 
     android:layout_width="50dp" 
     android:layout_height="35dp" 
     android:text="Go" /> 

</LinearLayout> 
+3

@EvanB кроме использования 'weight', этот ответ совершенно иная. Кроме того, поскольку они были всего лишь на одну минуту, я думаю, что можно с уверенностью предположить, что Пети все еще писал его, когда вы были опубликованы, так как он также писал полный код. Давайте все будем друзьями – codeMagic

+0

Отлично. Это было именно то, что я хочу. – MarcForn

+0

@codeMagic Я думаю, что я намеревался добавить «LOL» к этому, я обычно не груб. Извиняюсь. –

2

Макетная вставка идеально подходит для проектирования макетов, которые приспосабливаются к размеру экрана. Однако не забудьте установить layout_width в 0dp, иначе он не будет работать должным образом.

Использование так:

android:layout_width="0dp" 
    android:layout_weight="1" 
Смежные вопросы