Как центрировать CheckBox ниже EditText без использования вложенных макетов? - PullRequest
1 голос
/ 20 июня 2011

На скриншоте ниже, флажок не центрирован ниже текста редактирования выше.Как я могу центрировать флажок так, чтобы он был центрирован прямо под текстом редактирования?

enter image description here

Макет, который я использую для создания вышеуказанного интерфейса:

Макет XML

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/layout1"
android:layout_width="fill_parent"
android:layout_height="fill_parent">

<TextView
    android:id="@+id/textView1"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"

    android:padding="5dip"
    android:gravity="center"

    android:text="text 1"/>

<EditText
    android:id="@+id/editText1"
    android:layout_height="wrap_content"
    android:layout_width="fill_parent"
    android:layout_toRightOf="@+id/textView1"
    android:layout_alignTop="@+id/textView1"
    android:layout_alignBottom="@+id/textView1"

    android:padding="5dip"

    android:gravity="center"
    android:inputType="number"
    android:text="1"/>

<CheckBox
    android:id="@+id/checkBox"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:layout_below="@+id/editText1"
    android:layout_toRightOf="@+id/textView1"

    android:text="check"/>
</RelativeLayout>

Вещи, которые я уже пробовал на виджете CheckBox безуспешно:

  1. android_layoutAlignRight с виджетом EditText.

  2. `android: layout_gravity= "center_horizontal" на относительном макете

Я знаю, что могу добиться "центрирования", вложив CheckBox в другой относительный макет и используя android:layout_gravity="center" на внутреннем относительном макете, но я бы хотелпредпочитаю решение, которое позволяет избежать вложенных макетов.

Есть предложения?Спасибо.

Ответы [ 4 ]

1 голос
/ 20 июня 2011

Я не думаю, что это возможно, если вы не хотите добавить отступы к флажку слева, чтобы он переместился в центр текста редактирования.Вы можете сделать это, но это не рекомендуется.

0 голосов
/ 30 мая 2014

Я нашел довольно простое решение для этого, хотя оно требует использования RelativeLayout :

    <RelativeLayout 
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" >

    <CheckBox 
        android:id="@+id/remember_settings"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:textSize="12sp"
        android:textColor="#666666"
        android:text="@string/remember_settings"/>

</RelativeLayout>

В коде, как указано выше, оба значения layout_width и layout_centerInParent в CheckBox должны быть установлены в соответствии с примером выше: в противном случае он не будет работа.

Кроме того, если родительский RelativeView настроен на заполнение всего экрана, вы можете установить layout_width RelativeView в match_parent , в противном случае должно быть установлено значение fill_parent .

Надеюсь, это кому-нибудь поможет, так как я сам с этим немного боролся.

0 голосов
/ 20 июня 2011

Поскольку вы используете RelativeLayout, попробуйте

android:layout_centerHorizontal="true"

Хорошо, тогда вы можете использовать TableLayout следующим образом:

<?xml version="1.0" encoding="utf-8"?><TableLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/layout1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:stretchColumns="1"> 

<TableRow>

<TextView
    android:id="@+id/textView1"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content" 
    android:padding="5dip"          
    android:text="text 1"/>

<EditText
    android:id="@+id/editText1"
    android:layout_height="wrap_content"
    android:layout_width="fill_parent"      
    android:padding="5dip"      
    android:gravity="center"                
    android:inputType="number"
    android:text="1"/>

   </TableRow>

   <TableRow>

  <View/> 

<CheckBox
    android:id="@+id/checkBox"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:layout_gravity="center_horizontal"                  
    android:text="check"/>

 </TableRow></TableLayout>

Пустой узел - это намеренный взлом, чтобы установить флажок в «столбец» 1, а не в столбец 0.

Это дает следующее:

enter image description here

0 голосов
/ 20 июня 2011

Полагаю, вы хотите, чтобы поле и текст были в центре?Если вы установите гравитацию на флажок для центрирования и используете родителя заливки для ширины, то вы можете центрировать только текст.Но центр на нем все равно будет отключен от editText1, потому что сам Box будет вмещаться в общую ширину к центру.

Если вы используете вместо этого пользовательскую графическую кнопку переключения, то вы можете легко выполнить то, что вы хотитес помощью файла .9, и, вероятно, выглядело бы лучше в целом графически (то же самое Gravity: Center, Width: Fill Parent сверху)

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

...