Как выровнять радиокнопку в центре экрана
Я использую кнопки Radio в качестве вкладки в своем приложении.
Я загрузил изображения для него, но они выравниваются влево. как заставить их выровнять по центру.
![enter image description here]()
Вот как выглядит мой XML файл
<?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>
Ответы
Ответ 1
Попробуйте android:gravity="center"
в xml для каждого RadioButton.
Я вижу, что вы wrap_content, поэтому теоретически это ничего не должно делать, но похоже, что значки разделены поровну, возможно, RadioGroup равномерно разделяет пространство, поэтому используя андроид: гравитация будет иметь эффект.
Скорее всего, я думаю.
ИЗМЕНИТЬ
Попробуйте следующее:
<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"
, чтобы он был правильно центрирован, но это позволит вам делать то, что вы хотите сделать. Я скопировал ваш макет и протестировал это время, поэтому я знаю, что он работает!:)
Ответ 2
У меня была аналогичная проблема раньше, я понимаю, поэтому я пытаюсь объяснить это вам.
![runtime screenshot]()
выше - это скриншот моего приложения, как вы можете видеть, я тоже сделал то же самое, у меня было меню с нижним экраном экрана, они - RadioGroup и три RadionButton внутри, я хочу, чтобы каждый значок меню выравнивал центр для RadionButton, теневое изображение (9-патч), отображаемое вместе при триггере кнопки проверки кнопки.
Во-первых, я использовал атрибут android: button, относящийся к выделенному селектору, селектор имеет два допустимых состояния между проверкой и снятием флажка, но я не могу выровнять центр значка меню и закрасить изображение тени RadionButton, они выглядят так:
![enter image description here]()
Я попытался включить android: layout_gravity = center и android: gravity = center с помощью RadionButton, но он также не получил эффекта. после этого мой помощник сказал мне, что атрибут андроид: кнопка относится к переднему, а не к фону, затем я использую андроид: фон вместо андроида: кнопка strong > и он работал, ниже мой код:
<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>
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-конфигурацией, мы должны изучить и использовать его.
Ответ 3
Вы можете использовать пустые представления для равномерного распределения пространства между переключателями.
В этом случае у меня есть 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>
Ответ 4
Вы можете поместить свой RadioButton в FrameLayout и центрировать их:
<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>
Ответ 5
Я пробовал все вышеперечисленное, и он не работает.
Я нашел лучшее решение, которое хотел бы поделиться.
Установите кнопку @null
; затем добавьте выделение на android:drawableTop
или любой другой тип позиции. Это позволит нам установить чертежи в другое положение radioButton. добавьте некоторые padding
или drawablePadding
, чтобы он не касался какой-либо стороны кнопки/текста.
android:background="@drawable/background_paint"
android:drawableTop="@drawable/shape"
android:button="@null"
Ответ 6
в моем случае, содержимое моего переключателя было выровнено правильно. Я позволяю им выровнять центр с помощью set 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>
Ответ 7
Поместите андроид: gravity = "center" в тег RadioGroup. Это работает.
Ответ 8
<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>
Ответ 9
Попробуйте добавить android:layout_gravity="center_horizontal"
на ваш RadioGroup
.
Ответ 10
Я использовал эту строку в моем RadioGroup
и работает нормально!
android:gravity="center|left"
Ответ 11
Это было в противоположной стороне в моем случае, и я просто положил android: paddingLeft = "0dp", и он работал так, чтобы вы попытались использовать android: paddingRight = "0dp" для радиоблоков