Android: как изменить размер RadioButton

В моем приложении много RadioButton. RadioButtons слишком велики для меня. Есть ли способ сделать их меньше?


person TianDong    schedule 10.06.2010    source источник
comment
Я думаю, вы могли бы написать свой собственный элемент управления, но имейте в виду, что если элементы управления будут слишком маленькими, это может затруднить для некоторых пользователей точное нажатие элемента управления в сенсорном режиме. Это снизит удобство использования вашего приложения.   -  person codinguser    schedule 10.06.2010
comment
Я нашел это решение, см. мой ответ здесь https://stackoverflow.com/a/44310577/6112256   -  person Orlay Garcia Duconge    schedule 01.06.2017


Ответы (8)


Невозможно, радиокнопка является встроенным компонентом управления, поэтому ее размер фиксирован.

person arclight    schedule 10.06.2010
comment
Это может быть нелегко сделать, но возможно; см. stackoverflow.com/a/4787260/3063884 - person CJBS; 06.02.2015
comment
Пожалуйста, не отвечайте, спец. с отрицательными замечаниями, так как это невозможно и т. д., не будучи уверенным! Смотрите, у Майкла есть простое и действенное решение! - person Apostolos; 06.11.2016

Одним из быстрых хакерских решений является уменьшение размера кнопки:

<RadioButton
  android:scaleX="0.5"
  android:scaleY="0.5" />

Это отлично подходит для того, чтобы стать меньше.

Для увеличения это имеет тенденцию вызывать некоторое отсечение от представления контейнера, поэтому вам, вероятно, придется жестко закодировать высоту/ширину RadioGroup, чтобы она соответствовала масштабируемым кнопкам. Рисуемая кнопка также может стать заметно пиксельной по мере увеличения размера, поэтому это не очень здорово, если вы хотите что-то в 3 раза больше...

person Community    schedule 08.12.2015
comment
и добавление android:textSize=[size]sp также будет масштабировать метку переключателя, но для сопоставления размера кнопки и метки требуется более жесткий код... - person sepehr; 25.07.2016
comment
Уменьшает размер кнопки, но оставляет между ними больше промежутков. - person Gary Davies; 12.10.2017

Это можно сделать, но это не так просто, как установка Layout_Width и Layout_height, как с EditTexts, Buttons и т. д. Чтобы изменить размер/внешний вид представления, такого как флажок/переключатель, используйте «Фон» и Свойства «кнопки», чтобы указать свои собственные чертежи.

Это старая страница, и расположение теперь другое, но это даст вам представление: http://www.anddev.org/tutorial_change_look_of_checkbox-t4553.html

person IM.    schedule 24.01.2011
comment
Это неработающая ссылка. - person Mitch; 13.05.2020

вы можете использовать свойства 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" />
person Colone1    schedule 12.11.2018

Я заменил 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: как получить радиогруппу с переключателями?

person Andrey Aleev    schedule 16.05.2019

В настоящее время в Android Vector Asset Studio есть значки для неотмеченных и отмеченных переключателей. Вы можете импортировать этот вектор, а затем изменить цвет, изменив android:tint внутри вектора xml

Затем установите 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))
person Linh    schedule 29.01.2021

Существует альтернативный подход к изменению размера. Импорт переключателя установлен и снят с векторного актива.

Создайте три рисуемых

радио_кнопка_проверить

  • укажите любую ширину и высоту

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

На изображении первый — это настраиваемый переключатель, а второй — по умолчанию.

введите здесь описание изображения

person Black    schedule 02.07.2021

person    schedule
comment
ths не масштабирует внутренний стиль переключателя - person juztcode; 12.12.2019