Android: Как изменить размер CheckBox? - PullRequest
85 голосов
/ 28 января 2010

Я хотел бы сделать CheckBox немного меньше / больше, как я могу это сделать?

Ответы [ 11 ]

131 голосов
/ 24 апреля 2013

Начиная с API уровня 11, существует другой подход:

<CheckBox
    ...
    android:scaleX="0.70"
    android:scaleY="0.70"
/>
75 голосов
/ 18 марта 2016

Вот лучшее решение, которое не обрезает и / или не размывает прорисовываемое, но работает только в том случае, если у флажка нет самого текста (но вы все равно можете иметь текст, это просто более сложно, см. В конце).

<CheckBox
    android:id="@+id/item_switch"
    android:layout_width="160dp"    <!-- This is the size you want -->
    android:layout_height="160dp"
    android:button="@null"
    android:background="?android:attr/listChoiceIndicatorMultiple"/>

Результат:

image

Как выглядело предыдущее решение с scaleX и scaleY:

image

У вас может быть текстовый флажок, добавив TextView рядом с ним и добавив прослушиватель щелчков на родительском макете, а затем программный вызов флажка.

55 голосов
/ 28 января 2010

Вам просто нужно установить соответствующие элементы рисования и установить их в поле:

<CheckBox 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"
    android:text="new checkbox" 
    android:background="@drawable/my_checkbox_background"
    android:button="@drawable/my_checkbox" />

Хитрость в том, как настроить рисованные элементы. Вот хороший урок об этом .

11 голосов
/ 19 июня 2017

Ну, я нашел много ответов, но они отлично работают без текста, когда нам требуется текст также с флажком, как в моем пользовательском интерфейсе enter image description here

Здесь, согласно моему требованию к пользовательскому интерфейсу, я не могу не увеличивать TextSize, поэтому я попробовал другой вариант: scaleX и scaleY (установите флажок) и пользовательский селектор xml с изображениями .png (это также создает проблему с другим размером экрана)

Но у нас для этого есть другое решение: Vector Drawable

Сделайте это в 3 шага.

Шаг 1: Скопируйте туда Vector Drawable в вашу папку для рисования

checked.xml

<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="16dp"
android:height="16dp"
android:viewportHeight="24.0"
android:viewportWidth="24.0">
<path
    android:fillColor="#FF000000"
    android:pathData="M19,3L5,3c-1.11,0 -2,0.9 -2,2v14c0,1.1 0.89,2 2,2h14c1.11,0 2,-0.9 2,-2L21,5c0,-1.1 -0.89,-2 -2,-2zM10,17l-5,-5 1.41,-1.41L10,14.17l7.59,-7.59L19,8l-9,9z" />
</vector>

un_checked.xml

<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="16dp"
android:height="16dp"
android:viewportHeight="24.0"
android:viewportWidth="24.0">
<path
    android:fillColor="#FF000000"
    android:pathData="M19,5v14H5V5h14m0,-2H5c-1.1,0 -2,0.9 -2,2v14c0,1.1 0.9,2 2,2h14c1.1,0 2,-0.9 2,-2V5c0,-1.1 -0.9,-2 -2,-2z" />
</vector>

( Обратите внимание, что если вы работаете с Android Studio, вы также можете добавить туда эту векторную форму для рисования, щелкните правой кнопкой мыши на своей папке для рисования, затем выберите Новый / векторный актив, чтобы выбрать эти элементы для рисования оттуда ) Шаг 2: Создать Xml-селектор для check_box

check_box_selector.xml

<?xml version="1.0" encoding="utf-8"?>

<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/checked" android:state_checked="true" />
<item android:drawable="@drawable/un_checked" />
</selector>

Шаг 3: Установите этот флажок в поле

<CheckBox
android:id="@+id/suggectionNeverAskAgainCheckBox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:button="@drawable/check_box_selector"
android:textColor="#FF000000"
android:textSize="13dp"
android:text="  Never show this alert again" />

Теперь это как:

enter image description here


Вы можете изменить его ширину и высоту или viewportHeight и viewportWidth и fillColor также


Надеюсь, это поможет!

9 голосов
/ 16 ноября 2016

Я использую

android:scaleX="0.70" android:scaleY="0.70"

чтобы установить размер флажка

тогда я установил поля вот так

android:layout_marginLeft="-10dp"

для настройки этого флажка.

6 голосов
/ 02 марта 2014

Вот что я сделал, первый набор:

android:button="@null"

, а также установить

android:drawableLeft="@drawable/selector_you_defined_for_your_checkbox"

тогда в вашем коде Java:

Drawable d = mCheckBox.getCompoundDrawables()[0];
d.setBounds(0, 0, width_you_prefer, height_you_prefer);
mCheckBox.setCompoundDrawables(d, null, null, null);

Это работает для меня, и, надеюсь, это будет работать для вас!

4 голосов
/ 07 декабря 2012

ОБНОВЛЕНИЕ : это работает только с API 17 и далее ...


Чтобы добавить к другим блестящим ответам, которые уже даны, вы можете сделать флажок настолько маленьким, насколько позволяет размер текста.

Согласно моему ответу на этот вопрос: - как мы можем уменьшить размер флажка, пожалуйста, дайте мне представление


CheckBox получает свою высоту из текста, а также изображения.

Установите эти свойства в своем XML:

android:text=""
android:textSize="0sp"

Конечно, это работает, только если вы не хотите текста (работал для меня).

Без этих изменений CheckBox давал мне большое поле вокруг моего изображения, как упоминал Джо

0 голосов
/ 10 января 2019

Предположим, ваш исходный xml:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_checked="true"
        android:drawable="@drawable/tick_img" />
    <item android:state_checked="false"
        android:drawable="@drawable/untick_img" />
</selector>

, затем просто удалите android:button="@drawable/xml_above" в своем флажке xml и выполните масштабируемое масштабирование в java программно (уменьшите размер 150 до желаемого значения dp):

CheckBox tickRememberPasswd = findViewById(R.id.remember_tick);

//custom selector size
Drawable drawableTick = ContextCompat.getDrawable(this, R.drawable.tick_img);
Drawable drawableUntick = ContextCompat.getDrawable(this, R.drawable.untick_img);
Bitmap bitmapTick = null;
if (drawableTick != null && drawableUntick != null) {
    int desiredPixels = Math.round(convertDpToPixel(150, this));

    bitmapTick = ((BitmapDrawable) drawableTick).getBitmap();
    Drawable dTick = new BitmapDrawable(getResources()
            , Bitmap.createScaledBitmap(bitmapTick, desiredPixels, desiredPixels, true));

    Bitmap bitmapUntick = ((BitmapDrawable) drawableUntick).getBitmap();
    Drawable dUntick = new BitmapDrawable(getResources()
            , Bitmap.createScaledBitmap(bitmapUntick, desiredPixels, desiredPixels, true));

    final StateListDrawable statesTick = new StateListDrawable();
    statesTick.addState(new int[] {android.R.attr.state_checked},
            dTick);
    statesTick.addState(new int[] { }, //else state_checked false
            dUntick);
    tickRememberPasswd.setButtonDrawable(statesTick);
}

метод convertDpToPixel:

public static float convertDpToPixel(float dp, Context context) {
    Resources resources = context.getResources();
    DisplayMetrics metrics = resources.getDisplayMetrics();
    float px = dp * (metrics.densityDpi / 160f);
    return px;
}
0 голосов
/ 01 октября 2018

Вы можете попробовать следующее решение, чтобы изменить размер пользовательского флажка, установив для следующих свойств значение Checkbox в файле макета. Работа для меня

android:button="@null"
android:scaleX="0.8"
android:scaleY="0.8"
android:background="@drawable/custom_checkbox"

добавить следующие строки в файл для рисования

<selector xmlns:android="http://schemas.android.com/apk/res/android">

<item android:state_checked="false"
      android:drawable="@drawable/unchecked_img" />
<item android:state_checked="true"
      android:drawable="@drawable/checked_img" />
</selector>
0 голосов
/ 19 ноября 2017

используйте этот код.

в макете:

<CheckBox
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:button="@drawable/my_checkbox"  *** here
        android:checked="true"/>

добавить новый объект рисования: my_checkbox.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/checkbox_off_background"/>

<item
    android:state_checked="true"
    android:drawable="@drawable/checkbox_on_background"/>

и конец создания 2 рисования:

checkbox_off_background.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list
    xmlns:android="http://schemas.android.com/apk/res/android">

<item>
    <shape android:shape="rectangle">
        <size
            android:height="25dp"   *** your size
            android:width="25dp"/>
    </shape>
</item>

<item android:drawable="@android:drawable/checkbox_off_background"/>

и тоже checkbox_on_background.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list
    xmlns:android="http://schemas.android.com/apk/res/android">

<item>
    <shape android:shape="rectangle">
        <size
            android:height="25dp"
            android:width="25dp"/>
    </shape>
</item>

<item android:drawable="@android:drawable/checkbox_on_background"/>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...