В моем приложении много RadioButton
. RadioButtons слишком велики для меня. Есть ли способ сделать их меньше?
Android: как изменить размер RadioButton
Ответы (8)
Невозможно, радиокнопка является встроенным компонентом управления, поэтому ее размер фиксирован.
Одним из быстрых хакерских решений является уменьшение размера кнопки:
<RadioButton
android:scaleX="0.5"
android:scaleY="0.5" />
Это отлично подходит для того, чтобы стать меньше.
Для увеличения это имеет тенденцию вызывать некоторое отсечение от представления контейнера, поэтому вам, вероятно, придется жестко закодировать высоту/ширину RadioGroup, чтобы она соответствовала масштабируемым кнопкам. Рисуемая кнопка также может стать заметно пиксельной по мере увеличения размера, поэтому это не очень здорово, если вы хотите что-то в 3 раза больше...
Это можно сделать, но это не так просто, как установка Layout_Width и Layout_height, как с EditTexts, Buttons и т. д. Чтобы изменить размер/внешний вид представления, такого как флажок/переключатель, используйте «Фон» и Свойства «кнопки», чтобы указать свои собственные чертежи.
Это старая страница, и расположение теперь другое, но это даст вам представление: http://www.anddev.org/tutorial_change_look_of_checkbox-t4553.html
вы можете использовать свойства scalex и scaley, а затем использовать translationX и translationY, чтобы поместить их в окна радиокнопок.
<RadioButton
android:id="@+id/rbtnfkilo"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:scaleX="1.4"
android:scaleY="1.4"
android:text="Kilogram"
android:textColor="#fff"
android:textSize="18sp"
android:translationX="24dp" />
Я заменил RadioButton
на ToggleButton
и применил тот же стиль. Я переопределил фон и кнопку.
<ToggleButton
android:id="@+id/btnToggle1"
android:layout_width="match_parent"
android:layout_height="30dp"
android:layout_weight="1"
android:checked="true"
style="@style/ToggleButtonStyle"
android:button="@null"
android:textOn="@string/btnTitle"
android:textOff="@string/btnTitle"/>
и стиль:
<style name="ToggleButtonStyle">
<item name="android:background">@drawable/background_radiobutton</item>
<item name="android:textColor">@color/selector_text_radiobutton</item>
<item name="android:textAppearance">@null</item>
</style>
У меня работает - выглядит так же, но с нестандартной высотой.
Если ваш RadioButton находится в RadioGroup, вам нужно будет настроить прослушиватель, проверьте Android: как получить радиогруппу с переключателями?
В настоящее время в Android Vector Asset Studio есть значки для неотмеченных и отмеченных переключателей. Вы можете импортировать этот вектор, а затем изменить цвет, изменив android:tint
внутри вектора xml
![](https://i.stack.imgur.com/R0TaV.png)
Затем установите background
для RadioButton
как
bg_radio_selector.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="false" android:drawable="@drawable/ic_baseline_radio_button_unchecked_24" />
<item android:state_checked="true" android:drawable="@drawable/ic_baseline_radio_button_checked_24" />
</selector>
..xml
<androidx.appcompat.widget.AppCompatRadioButton
android:layout_width="@dimen/dp_24"
android:layout_height="@dimen/dp_24"
android:background="@drawable/bg_radio_selector"
android:button="@null" />
Теперь вы можете изменить размер RadioButton
на любой размер, который вы хотите, но, возможно, будет трудно щелкнуть, потому что область щелчка довольно мала.
Чтобы увеличить область щелчка, мы можем использовать эту функцию (обратите внимание, что отступы не будут работать, потому что мы используем свойство background
для RadioButton
) (решение из Как увеличить область нажатия кнопки Android без масштабирования фона?)
fun View.increaseTouchArea(pixel: Int) {
val parent = parent as View
parent.post {
val rect = Rect()
getHitRect(rect)
rect.top -= pixel
rect.left -= pixel
rect.bottom += pixel
rect.right += pixel
parent.touchDelegate = TouchDelegate(rect, this)
}
}
и
yourRadioButton.increaseTouchArea(context.resources.getDimensionPixelOffset(R.dimen.dp_12))
Существует альтернативный подход к изменению размера. Импорт переключателя установлен и снят с векторного актива.
Создайте три рисуемых
радио_кнопка_проверить
укажите любую ширину и высоту
radio_button_uncheck
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:width="60dp"
android:height="60dp"
android:drawable="@drawable/ic_radio_button_unchecked" />
</layer-list>
пользовательская_радио_кнопка
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/radio_button_check" android:state_checked="true"></item>
<item android:drawable="@drawable/radio_button_uncheck"></item>
</selector>
Переключатель
В радиокнопке
<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:button="@drawable/custom_radio_button"
android:paddingLeft="10dp"
android:textSize="39dp"
android:text="1" />
В случае изменения размера текста используйте свойство android:textSize
На изображении первый — это настраиваемый переключатель, а второй — по умолчанию.