CheckBox'ı biraz küçültmek / büyütmek istiyorum, bunu nasıl yapabilirim?
Yanıtlar:
Sadece ilgili çekilebilir öğeleri ayarlamanız ve onay kutusunda ayarlamanız yeterlidir:
<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" />
İşin püf noktası, çekmecelerin nasıl ayarlanacağıdır. İşte bununla ilgili iyi bir öğretici .
API Seviye 11'den başlayarak başka bir yaklaşım vardır:
<CheckBox
...
android:scaleX="0.70"
android:scaleY="0.70"
/>
Burada, çekilebilir olanı kırpmayan ve / veya bulanıklaştırmayan daha iyi bir çözüm var, ancak yalnızca onay kutusunun kendisi metne sahip değilse işe yarıyor (ancak yine de metne sahip olabilirsiniz, sadece daha karmaşıktır, sonuna bakın).
<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"/>
Sonuç:
Ne önceki çözüm scaleX
ve scaleY
benziyordu:
Yanına bir metin onay kutusu ekleyip TextView
üst düzene bir tıklama dinleyicisi ekleyerek ve ardından onay kutusunu programlı olarak tetikleyerek bir metin onay kutusuna sahip olabilirsiniz .
Pek çok cevap buldum, ancak kullanıcı arayüzümdeki gibi onay kutusuyla da metin istediğimizde metin olmadan iyi çalışıyorlar
Burada UI gereksinimime göre TextSize'ı artıramıyorum, bu yüzden denediğim diğer seçenek scaleX ve scaleY (Onay kutusunu işaretleyin) ve .png Görüntüleriyle özel xml seçici (aynı zamanda farklı ekran boyutlarında sorun yaratıyor)
Ancak bunun için başka bir çözümümüz var, bu Vektör Çizilebilir
3 adımda yapın.
Adım 1: Bu üç Vector Drawable'ı çekilebilir klasörünüze kopyalayın
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 ile çalışıyorsanız, bu Vector Drawable'ı oradan da ekleyebilirsiniz, Çizilebilir klasörünüze sağ tıklayın ve ardından New / Vector Asset'e tıklayın, ardından bu çekilebilir öğeleri oradan seçin )
Adım 2: check_box için XML seçici oluşturun
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>
Adım 3: Çekilebilirliği onay kutusuna ayarlayın
<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" />
Şimdi şöyle:
Genişliğini ve yüksekliğini veya görüntü alanını değiştirebilirsiniz.Yükseklik ve görünüm penceresiGenişlik ve fillColor ayrıca
Umarım yardımcı olur!
android:button="@null"
ve android:background="@drawable/check_box_selector"
o onay kutusu boyutunu ayarlamak yapmak.
kullanırım
android:scaleX="0.70"
android:scaleY="0.70"
onay kutusunun boyutunu ayarlamak için
sonra böyle kenar boşlukları koyarım
android:layout_marginLeft="-10dp"
onay kutusunun konumunu ayarlamak için.
İşte yaptığım şey, ilk set:
android:button="@null"
ve ayrıca ayarla
android:drawableLeft="@drawable/selector_you_defined_for_your_checkbox"
sonra Java kodunuzda:
Drawable d = mCheckBox.getCompoundDrawables()[0];
d.setBounds(0, 0, width_you_prefer, height_you_prefer);
mCheckBox.setCompoundDrawables(d, null, null, null);
Benim için çalışıyor ve umarım sizin için de işe yarar!
GÜNCELLEME : Bu yalnızca API 17'den itibaren çalışır ...
Halihazırda verilmiş olan diğer harika cevaplara eklemek için, onay kutusunu yalnızca metin boyutunun izin verdiği kadar küçük yapabilirsiniz.
Bu soruya verdiğim cevaba göre: - onay kutusunun boyutunu nasıl küçültebiliriz lütfen bana bir fikir verin
CheckBox
yüksekliğini TEXT'den ve görüntüden alır.
Bu özellikleri XML'nizde ayarlayın:
android:text=""
android:textSize="0sp"
Tabii ki bu sadece metin istemiyorsanız işe yarar (benim için çalıştı).
CheckBox
Joe'nun da bahsettiği gibi , bu değişiklikler olmadan imajımın etrafında
Düzen dosyanızda custom checkbox
aşağıdaki özellikleri olarak ayarlayarak boyutunu değiştirmek için aşağıdaki çözümü deneyebilirsiniz Checkbox
. Benim için çalıştı
android: scaleX = "0.8" android: scaleY = "0.8"
android:button="@null"
android:scaleX="0.8"
android:scaleY="0.8"
android:background="@drawable/custom_checkbox"
çekilebilir dosyaya aşağıdaki satırları ekleyin
<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>
Kendi görsellerinizi yaratmadan bunu yapmanın bir yolunu buldum. Başka bir deyişle, sistem görüntüsü ölçekleniyor. Çözümün mükemmel olduğunu iddia etmiyorum; Bazı adımları kısaltmanın bir yolunu bilen varsa, nasıl yapılacağını öğrenmekten memnuniyet duyarım.
İlk olarak, projenin ana aktivite sınıfına (WonActivity) şunu koydum. Bu doğrudan Stack Overflow'dan alındı - teşekkürler çocuklar !
/** 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);
}
İkincisi, "çekilebilirliği ölçeklendirmek" için bir sınıf oluşturdum. Lütfen standart ScaleDrawable'dan tamamen farklı olduğuna dikkat edin.
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);
}
}
Son olarak, bir onay kutusu sınıfı tanımladım.
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);
}
}
Bu kadar. Görünümünüze WonCheckBox koyarsanız ve setHeight () uygularsanız, onay kutusu görüntüsü doğru boyutta olacaktır.
bu kodu kullanın.
düzende:
<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:button="@drawable/my_checkbox" *** here
android:checked="true"/>
yeni bir çekilebilir ekleyin: 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"/>
ve sonunda 2 çekilebilir oluşturun:
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"/>
ve ayrıca 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"/>
Orijinal xml'nizin:
<?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>
daha sonra android:button="@drawable/xml_above"
onay kutunuzdaki xml'yi kaldırın ve java'da programlı olarak çekilebilir ölçeklendirme yapın ( 150
büyük boyutu istediğiniz dp'ye küçültün):
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
yöntem:
public static float convertDpToPixel(float dp, Context context) {
Resources resources = context.getResources();
DisplayMetrics metrics = resources.getDisplayMetrics();
float px = dp * (metrics.densityDpi / 160f);
return px;
}
İhtiyacım için uygun cevabı bulamadım ve anladım. Dolayısıyla, bu cevap, onay kutusunu çizilebilir ve metni ayrı ayrı yeniden boyutlandırmak istediğiniz aşağıdaki gibi metin içeren onay kutusu içindir.
İki PNG'ye ihtiyacınız var cb_checked.png ve cb_unchechecked.png bunları çekilebilir klasöre ekleyin
Şimdi cb_bg_checked.xml oluşturun
<?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>
Ve 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>
Ardından bir seçici XML checkbox.xml oluşturun
<?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>
Şimdi bunu layout.xml'nizi şöyle tanımlayın
<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 -->
Onay kutusuna özel bir resim eklemek istiyorsanız, düğmeyi boş olarak ayarlayın ve çözülen onay kutusuna arka plan ekleyin.
<CheckBox
android:layout_width="22dp"
android:layout_height="22dp"
android:layout_marginLeft="-10dp"
android:button="@null"
android:background="@drawable/memory_selector"/>