Я хотел бы сделать CheckBox немного меньше / больше, как я могу это сделать?
93
Вам просто нужно установить соответствующие чертежи и установить их в флажке:
<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" />
Хитрость в том, как установить чертежи. Вот хороший урок об этом .
Начиная с уровня API 11 существует другой подход:
<CheckBox ... android:scaleX="0.70" android:scaleY="0.70" />
источник
Вот лучшее решение, которое не обрезает и / или не размывает рисованный объект, а работает только в том случае, если у флажка нет самого текста (но вы все еще можете иметь текст, это просто более сложно, см. В конце).
<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"/>
Результат:
Как выглядело предыдущее решение
scaleX
иscaleY
:Вы можете установить текстовый флажок, добавив
TextView
рядом с ним и добавив прослушиватель щелчков в родительский макет, а затем программно активировав флажок.источник
Ну, я нашел много ответов, но они отлично работают без текста, когда нам нужен текст также с флажком, как в моем пользовательском интерфейсе
Здесь, в соответствии с моим требованием к пользовательскому интерфейсу, я не могу не увеличить TextSize, поэтому другой вариант, который я пробовал, - это scaleX и scaleY (установите флажок) и пользовательский селектор xml с изображениями .png (это также создает проблему с другим размером экрана)
Сделайте это за 3 шага.
Шаг 1. Скопируйте эти три векторных чертежа в папку для рисования.
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" />
Теперь это похоже на:
Надеюсь, это поможет!
источник
android:button="@null"
иandroid:background="@drawable/check_box_selector"
настроить размер флажка.я использую
android:scaleX="0.70" android:scaleY="0.70"
отрегулировать размер флажка
затем я установил такие поля
android:layout_marginLeft="-10dp"
для настройки положения флажка.
источник
Вот что я сделал вначале:
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);
Это работает для меня, и, надеюсь, сработает и для вас!
источник
ОБНОВЛЕНИЕ : это работает только с API 17 и далее ...
Чтобы добавить к другим уже приведенным блестящим ответам, вы можете сделать флажок только настолько маленьким, насколько позволяет размер текста.
В соответствии с моим ответом на этот вопрос: - как мы можем уменьшить размер флажка, дайте мне идею
CheckBox
получает свою высоту как от ТЕКСТА, так и от изображения.Задайте эти свойства в своем XML:
android:text="" android:textSize="0sp"
Конечно, это работает, только если вам не нужен текст (сработало для меня).
Без этих изменений
CheckBox
, как сказал Джо , у меня был большой запас по моему имиджу.источник
Вы можете попробовать следующее решение, чтобы изменить размер
custom checkbox
, установив следующие свойства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>
источник
Я нашел способ сделать это без создания собственных изображений. Другими словами, масштабируется системный образ. Я не претендую на идеальное решение; Если кто-то знает, как сократить некоторые шаги, я буду рад узнать, как это сделать.
Сначала я поместил следующее в основной класс деятельности проекта (WonActivity). Это было взято прямо из Stack Overflow - спасибо, ребята !
/** get the default drawable for the check box */ Drawable getDefaultCheckBoxDrawable() { int resID = 0; if (Build.VERSION.SDK_INT <= 10) { // pre-Honeycomb has a different way of setting the CheckBox button drawable resID = Resources.getSystem().getIdentifier("btn_check", "drawable", "android"); } else { // starting with Honeycomb, retrieve the theme-based indicator as CheckBox button drawable TypedValue value = new TypedValue(); getApplicationContext().getTheme().resolveAttribute(android.R.attr.listChoiceIndicatorMultiple, value, true); resID = value.resourceId; } return getResources().getDrawable(resID); }
Во-вторых, я создал класс для «масштабирования чертежа». Обратите внимание, что он полностью отличается от стандартного ScaleDrawable.
import android.graphics.drawable.*; /** The drawable that scales the contained drawable */ public class ScalingDrawable extends LayerDrawable { /** X scale */ float scaleX; /** Y scale */ float scaleY; ScalingDrawable(Drawable d, float scaleX, float scaleY) { super(new Drawable[] { d }); setScale(scaleX, scaleY); } ScalingDrawable(Drawable d, float scale) { this(d, scale, scale); } /** set the scales */ void setScale(float scaleX, float scaleY) { this.scaleX = scaleX; this.scaleY = scaleY; } /** set the scale -- proportional scaling */ void setScale(float scale) { setScale(scale, scale); } // The following is what I wrote this for! @Override public int getIntrinsicWidth() { return (int)(super.getIntrinsicWidth() * scaleX); } @Override public int getIntrinsicHeight() { return (int)(super.getIntrinsicHeight() * scaleY); } }
Наконец, я определил класс флажка.
import android.graphics.*; import android.graphics.drawable.Drawable; import android.widget.*; /** A check box that resizes itself */ public class WonCheckBox extends CheckBox { /** the check image */ private ScalingDrawable checkImg; /** original height of the check-box image */ private int origHeight; /** original padding-left */ private int origPadLeft; /** height set by the user directly */ private float height; WonCheckBox() { super(WonActivity.W.getApplicationContext()); setBackgroundColor(Color.TRANSPARENT); // get the original drawable and get its height Drawable origImg = WonActivity.W.getDefaultCheckBoxDrawable(); origHeight = height = origImg.getIntrinsicHeight(); origPadLeft = getPaddingLeft(); // I tried origImg.mutate(), but that fails on Android 2.1 (NullPointerException) checkImg = new ScalingDrawable(origImg, 1); setButtonDrawable(checkImg); } /** set checkbox height in pixels directly */ public void setHeight(int height) { this.height = height; float scale = (float)height / origHeight; checkImg.setScale(scale); // Make sure the text is not overlapping with the image. // This is unnecessary on Android 4.2.2, but very important on previous versions. setPadding((int)(scale * origPadLeft), 0, 0, 0); // call the checkbox's internal setHeight() // (may be unnecessary in your case) super.setHeight(height); } }
Вот и все. Если вы поместите WonCheckBox в свое представление и примените setHeight (), изображение флажка будет правильного размера.
источник
используйте этот код.
в макете:
<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"/>
источник
Предположим, ваш исходный 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; }
источник
Я не смог найти соответствующий ответ на свое требование, которое я понял. Итак, этот ответ предназначен для флажка с текстом, как показано ниже, где вы хотите изменить размер флажка и текста отдельно.
Вам нужно два PNG cb_checked.png и cb_unchechecked.png добавить их в папку с возможностью рисования
Теперь создайте cb_bg_checked.xml
<?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:tools="http://schemas.android.com/tools" xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/cb_checked" android:height="22dp" <!-- This is the size of your checkbox --> android:width="22dp" <!-- This is the size of your checkbox --> android:right="6dp" <!-- This is the padding between cb and text --> tools:targetApi="m" tools:ignore="UnusedAttribute" /> </layer-list>
И cb_bg_unchecked.xml
<?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"> <item android:drawable="@drawable/cb_unchechecked" android:height="22dp" <!-- This is the size of your checkbox --> android:width="22dp" <!-- This is the size of your checkbox --> android:right="6dp" <!-- This is the padding between cb and text --> tools:targetApi="m" tools:ignore="UnusedAttribute" /> </layer-list>
Затем создайте селектор XML checkbox.xml
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/cb_bg_checked" android:state_checked="true"/> <item android:drawable="@drawable/cb_bg_unchecked" android:state_checked="false"/> </selector>
Теперь определите его в своем layout.xml вот так
<CheckBox android:id="@+id/checkbox_with_text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:checked="true" android:button="@drawable/checkbox" android:text="This is text" android:textColor="@color/white" android:textSize="14dp" /> <!-- Here you can resize text -->
источник
Если вы хотите добавить настраиваемое изображение в флажок, установите для кнопки значение null и просто добавьте фон для флажка, который решает
<CheckBox android:layout_width="22dp" android:layout_height="22dp" android:layout_marginLeft="-10dp" android:button="@null" android:background="@drawable/memory_selector"/>
источник