Я хотів би зробити CheckBox трохи меншим / більшим, як я можу це зробити?
Відповіді:
Вам просто потрібно встановити пов’язані малюнки та встановити їх у прапорці:
<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, тому іншим варіантом, який я спробував, є масштаб X та масштаб Y (встановити прапорець) та спеціальний селектор xml із зображеннями .png (це також створює проблему з різним розміром екрану)
Але для цього у нас є інше рішення - Vector Drawable
Зробіть це в 3 кроки.
Крок 1: Скопіюйте ці три векторні малювальні у вашу папку, яку можна малювати
check.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" />
Зараз це як:
Ви можете змінити його ширину та висоту або viewportHeight та viewportWidth та fillColor
Сподіваюся, це допоможе!
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: scaleX = "0.8" android: scaleY = "0.8"
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_ Check.png і cb_unchecked.png, щоб додати їх до папки, яку можна малювати
Тепер створіть cb_bg_ verified.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_un verified.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 -->
Якщо ви хочете додати власне зображення до прапорця, тоді встановіть кнопку на нуль і просто додайте фон у прапорець, який вирішується
<CheckBox
android:layout_width="22dp"
android:layout_height="22dp"
android:layout_marginLeft="-10dp"
android:button="@null"
android:background="@drawable/memory_selector"/>