Вопрос по android – Как выровнять радио кнопку в центре экрана

12

Я использую Радио кнопки в качестве вкладки в моем приложении.

Я загрузил изображения для него, но они выравниваются по левой стороне. как заставить их выравниваться в центре.

enter image description here

Вот так выглядит мой XML-файл

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

  <LinearLayout android:orientation="vertical"
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent">

    <FrameLayout android:id="@android:id/tabcontent"
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content"
      android:layout_weight="1" 
      android:padding="20dip" 
      android:background="#fff"/>

    <RadioGroup android:layout_width="fill_parent"
      android:layout_height="wrap_content" 
      android:orientation="horizontal"
      android:checkedButton="@+id/allcontacts"
      android:id="@+id/contactgroup">


      <RadioButton android:id="@+id/allcontacts" 
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_gravity="center" 
      android:layout_weight="1"/>

      <RadioButton
          android:id="@+id/categories"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:layout_gravity="center"
          android:layout_weight="1"/>

      <RadioButton android:id="@+id/favourites" 
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_gravity="center" 
      android:layout_weight="1" />

    </RadioGroup>

    <TabWidget android:id="@android:id/tabs"
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content"
      android:layout_weight="0" android:visibility="gone" />
  </LinearLayout>
</TabHost>
</code>
Я хочу, чтобы вкладки появлялись внизу экрана. Если я использую виджет вкладок, вкладки выглядят выше, так что .. Naruto
Просто любопытно, почему ты не используешь TabWidget? Barak
Никогда не думал об этом, отличная идея. Я рад, что спросил. Еще один трюк, чтобы запихнуть в мои записи. :) Barak
У меня была похожая проблема, и я решил ее по-другому. Проверьте: / Stackoverflow.com вопросы / 36433050 / ... wviana

Ваш Ответ

11   ответов
10

android:gravity="center" в xml для каждой RadioButton.

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

Думаю, стоит попробовать.

РЕДАКТИРОВАТ

Попробуй это

  <RadioButton android:id="@+id/allcontacts" 
  android:layout_width="0dp"
  android:layout_height="wrap_content"
  android:layout_gravity="center"
  android:marginLeft="20dp" 
  android:gravity="center"
  android:layout_weight="1"/>

Тебе придется поиграть сandroid:marginLeft="20dp" чтобы правильно отцентрировать, но это позволит вам делать то, что вы хотите сделать. Я скопировал ваш макет и протестировал на этот раз, поэтому я Ноу оно работает! :)

Нет, это совсем не работает: Naruto
Еще раз подумал, обновил мой ответ. Barak
Понял, проверь мой пересмотренный ответ. Используйте то, что я описал ранее, и добавьтеandroid:marginLeft="#dp" с # - все, что необходимо для перемещения изображения в центр. Barak
Я пытался, но не смог получить ожидаемый результат: Naruto
Да, Барак, это сработало ... Спасибо за вашу помощь ... Hav gr8 day:) Naruto
24

я понял ее, поэтому я попытаюсь объяснить это для вас.

above - это скриншот моего приложения, как вы можете видеть, я тоже сделал то же самое, у меня был экран выравнивания меню внизу, они RadioGroup и три RadionButton внутри, я хочу, чтобы каждый значок выравнивания по центру меню для RadionButton, теневого изображения (9-патч) отображаются вместе при срабатывании события проверки кнопки.
Сначала я использовалandroid: кнопкатрибут @ относится к селектируемому селектору, у селектора есть два нарисованных состояния между проверкой и снятием флажка, но я не могу выровнять центр значка меню и заставить RadionButton заполнить теневое изображение, они выглядят так:

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

<RadioGroup android:layout_width="match_parent" android:layout_height="60dp"
        android:orientation="horizontal" android:background="@drawable/menu_bg">

    <RadioButton android:layout_width="0dp" android:layout_height="match_parent"
                 android:layout_weight="1" android:button="@null" android:checked="true"
                 android:background="@drawable/menu_item_selector" />

    <RadioButton android:layout_width="0dp" android:layout_height="match_parent"
                 android:layout_weight="1" android:button="@null"
                 android:background="@drawable/menu_item_selector" />

    <RadioButton android:layout_width="0dp" android:layout_height="match_parent"
                 android:layout_weight="1" android:button="@null"
                 android:background="@drawable/menu_item_selector" />

</RadioGroup>

the Menu_item_selector важная вещь, потому что она имеласила тяжест настройка:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/menu_item_layer_list" android:state_checked="true" />
    <item android:drawable="@drawable/menu_item_layer_list" android:state_pressed="true" />
    <item>
        <bitmap android:src="@drawable/menu_item_off" android:gravity="center" />
    </item>
</selector>

Потому что у меня было два изображения для рисования, когда пользователь проверял состояние кнопки «Поворот», фоновое изображение тени и изображение активного состояния значка, поэтому я использовал для этого слой-список, активный значок также имелсила тяжест настройка, ниже Menu_item_layer_list код:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/menu_bg_pressed" />
    <item>
        <bitmap android:src="@drawable/menu_item_on" android:gravity="center" />
    </item>
</layer-list>

Я не знаю, было ли это решение идеальным или нет, потому что я всегда реализую его как представление и рисую сам. Но я думаю, что Android SDK предоставляет более удобный компонент, давайте закончим работу с конфигурацией xml, мы должны изучить его и использовать.

Довольно элегантное решение. Благодарность Johan
лучшее решение на сегодняшний день! особенно для android: gravity = "center" вещь в тегах <item /> для вашего селектора была для меня настоящей новостью! недурно baske
android: button = "@ null" здесь главное! Yazon2006
14

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

<RadioGroup
            android:id="@+id/radioGroup1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal" >

            <View
                android:layout_width="0dip"
                android:layout_height="wrap_content"
                android:layout_weight="1" />

            <RadioButton
                android:id="@+id/radio0"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:gravity="center"
                android:text="" />

            <View
                android:layout_width="0dip"
                android:layout_height="wrap_content"
                android:layout_weight="1" />

            <RadioButton
                android:id="@+id/radio1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:checked="true"
                android:gravity="center"
                android:text="" />

            <View
                android:layout_width="0dip"
                android:layout_height="wrap_content"
                android:layout_weight="1" />

            <RadioButton
                android:id="@+id/radio2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:gravity="center"
                android:text="" />

            <View
                android:layout_width="0dip"
                android:layout_height="wrap_content"
                android:layout_weight="1" />
        </RadioGroup>
Очень хорошее решение! Работает для пейзажа и портрета. Soko
Спасибо, что поделились примером Naruto
Спасибо Гарри, это правильно. Bolling
Отличное решение! Но я использовал вместо TextView a View и для самого правого и левого вида android: layout_weight = "0.5". Harry
ohhohhoooohooooo ,, очень много Vishal Patel
3

центру:

<RadioGroup
    android:id="@+id/radioGroup1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/gray_percent"
    android:orientation="horizontal" >

    <FrameLayout
        android:layout_width="0dip"
        android:layout_height="wrap_content" 
         android:layout_weight="1">

        <RadioButton
            android:id="@+id/radio0"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"

            android:button="@drawable/rb_temp1"
            android:checked="true"
            android:gravity="center" />
    </FrameLayout>

    <FrameLayout
        android:layout_width="0dip"
        android:layout_height="wrap_content" 
         android:layout_weight="1">

        <RadioButton
            android:id="@+id/radio0"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"

            android:button="@drawable/rb_temp1"
            android:gravity="center" />
    </FrameLayout>

</RadioGroup>
но тогда как вы получите доступ к свойству радиогруппы, чтобы выбрать только одного ребенка. CoDe
Чтобы повторить проблему @Shubh, если вы используете этот метод центрирования радиокнопок, функциональность по умолчанию, позволяющая выбирать только одну радиокнопку за раз, НЕ будет работать. Вам придется вручную реализовать обработку, позволяющую проверять одну кнопку за раз. Поэтому я бы порекомендовал найти другой способ центрирования радиокнопок, если эта функциональность по умолчанию имеет для вас значение. w3bshark
1

Я нашел лучшее решение, которым хотел бы поделиться. Установите кнопку на@null; затем добавьте drawable кandroid:drawableTop или любой другой тип позиции. Это позволит нам установить drawables в другое положение radioButton. Добавь немногоpadding илиdrawablePadding чтобы он не прилипал к какой-либо стороне кнопки / текста.

android:background="@drawable/background_paint"
android:drawableTop="@drawable/shape"
android:button="@null"
Ты был прав! Просто я добавил конкретныйрос + android: MinHeight + android: paddingTop! = Центр изображения выглядит красиво! Спасибо Cristofer
1

center" на теге радиогруппы. Это работает

1

ил им выровнять их по центру с помощью набора android: background будет иметь некоторое значение, например @null или некоторый цвет. ниже был мой макет

<LinearLayout
    android:id="@+id/tab"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:orientation="horizontal" >

    <RadioGroup
        android:paddingTop="5dp"
        android:id="@+id/radioGroupAsTab"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:layout_gravity="center_vertical|center_horizontal"
        android:gravity="center_vertical|center_horizontal"
        android:background="@color/v3_header_bg"
        android:fadingEdge="none"
        android:orientation="horizontal" >

        <RadioButton
            android:id="@+id/rbDiagnose"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:background="@null"
            android:button="@null"
            android:checked="true"
            android:drawableTop="@drawable/v3_tab_diagnose"
            android:layout_gravity="center_vertical|center_horizontal"
            android:gravity="center_vertical|center_horizontal"
            android:text="@string/tabCaption_health_maintenance"
            android:textColor="@color/radio_astab_changecolor"
            android:textSize="10sp"
            android:textStyle="bold" />

        <RadioButton
            android:id="@+id/rbHistory"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:background="@null"
            android:button="@null"
            android:drawableTop="@drawable/v3_tab_history"
            android:layout_gravity="center_vertical|center_horizontal"
            android:gravity="center_vertical|center_horizontal"
            android:text="@string/tabCaption_history"
            android:textColor="@color/radio_astab_changecolor"
            android:textSize="10sp"
            android:textStyle="bold" />

        <RadioButton
            android:id="@+id/rbChart"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:background="@null"
            android:button="@null"
            android:drawableTop="@drawable/v3_tab_chart"
            android:layout_gravity="center_vertical|center_horizontal"
            android:gravity="center_vertical|center_horizontal"
            android:text="@string/tabCaption_graph"
            android:textColor="@color/radio_astab_changecolor"
            android:textSize="10sp"
            android:textStyle="bold" />

        <RadioButton
            android:id="@+id/rbCyclopedia"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:background="@null"
            android:button="@null"
            android:drawableTop="@drawable/v3_tab_encyclopedia"
            android:layout_gravity="center_vertical|center_horizontal"
            android:gravity="center_vertical|center_horizontal"
            android:text="@string/tabCaption_encyclopedia"
            android:textColor="@color/radio_astab_changecolor"
            android:textSize="10sp"
            android:textStyle="bold" />

        <RadioButton
            android:id="@+id/rbSetting"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:background="@null"
            android:button="@null"
            android:drawableTop="@drawable/v3_tab_setting"
            android:layout_gravity="center_vertical|center_horizontal"
            android:gravity="center_vertical|center_horizontal"
            android:text="@string/tabCaption_info"
            android:textColor="@color/radio_astab_changecolor"
            android:textSize="10sp"
            android:textStyle="bold" />
    </RadioGroup>
</LinearLayout>
1
 <RadioGroup
    android:id="@+id/radioGroup1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="center_horizontal"
    android:orientation="horizontal" >
       <RadioButton
        android:id="@+id/rb1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="One"/>

        <RadioButton
        android:id="@+id/rb2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Two"/>
 </RadioGroup>
Он отлично работает для меня.. Urvi Jasani
Я думаю, что это лучшее решение из всех. Установка ширины вwrap_content или до определенной постоянной ширины позволяет RadioButtons быть настолько широкими, насколько это необходимо, а RadioGroup центрировать весь набор RadioButtons. Отличная работа w3bshark
0

и я просто поставил android: paddingLeft = "0dp", и это сработало, поэтому вы должны попробовать android: paddingRight = "0dp" для радиокнопок

0

android:layout_gravity="center_horizontal"на вашейRadioGroup.

0

я использовал эту строку в моемRadioGroup и работает нормально!

android:gravity="center|left" 
Спасибо, спасибо, что поделились. Naruto

Похожие вопросы