Пользовательский флажок изображение android
есть ли простой способ использовать пользовательское изображение для флажка? Я ищу, чтобы дублировать" звездное " поведение gmail. Поэтому я хочу иметь флажок, который, когда он установлен, является заполненной звездой. А когда нет галочки-это пустая звезда. Должен ли я использовать imageview и делать свою собственную логику самостоятельно?
8 ответов:
создать выигрышного селектор флажок:
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android" > <item android:drawable="@drawable/checkbox" android:state_checked="false"/> <item android:drawable="@drawable/checkboxselected" android:state_checked="true"/> <item android:drawable="@drawable/checkbox"/> </selector>
убедитесь, что ваш флажок такой
android:button="@drawable/checkbox_selector"
<CheckBox android:layout_width="match_parent" android:layout_height="wrap_content" android:button="@drawable/checkbox_selector" android:text="CheckBox" android:textAppearance="?android:attr/textAppearanceLarge" android:textColor="@color/Black" />
скопируйте btn_check.xml из android-sdk / platforms/android-#/data/res / drawable в папку drawable вашего проекта и измените состояния изображения " on " и " off " на ваши пользовательские изображения.
тогда ваш xml будет просто нужно
android:button="@drawable/btn_check"
<CheckBox android:button="@drawable/btn_check" android:layout_width="wrap_content" android:layout_height="wrap_content" android:checked="true" />
Если вы хотите использовать различные значки android по умолчанию, вы можете использовать
android:button="@android:drawable/..."
Если у вас есть Android с открытым исходным кодом, вы можете найти определение стилей в:
src / Framework / base / core/res/res / values<style name="Widget.CompoundButton.CheckBox"> <item name="android:background"> @android:drawable/btn_check_label_background </item> <item name="android:button"> ?android:attr/listChoiceIndicatorMultiple </item> </style>
попробуй -
package com; import android.content.Context; import android.content.res.TypedArray; import android.util.AttributeSet; import android.view.View; import android.widget.ImageView; public class CheckBoxImageView extends ImageView implements View.OnClickListener { boolean checked; int defImageRes; int checkedImageRes; OnCheckedChangeListener onCheckedChangeListener; public CheckBoxImageView(Context context, AttributeSet attr, int defStyle) { super(context, attr, defStyle); init(attr, defStyle); } public CheckBoxImageView(Context context, AttributeSet attr) { super(context, attr); init(attr, -1); } public CheckBoxImageView(Context context) { super(context); } public boolean isChecked() { return checked; } public void setChecked(boolean checked) { this.checked = checked; setImageResource(checked ? checkedImageRes : defImageRes); } private void init(AttributeSet attributeSet, int defStyle) { TypedArray a = null; if (defStyle != -1) a = getContext().obtainStyledAttributes(attributeSet, R.styleable.CheckBoxImageView, defStyle, 0); else a = getContext().obtainStyledAttributes(attributeSet, R.styleable.CheckBoxImageView); defImageRes = a.getResourceId(0, 0); checkedImageRes = a.getResourceId(1, 0); checked = a.getBoolean(2, false); a.recycle(); setImageResource(checked ? checkedImageRes : defImageRes); setOnClickListener(this); } @Override public void onClick(View v) { checked = !checked; setImageResource(checked ? checkedImageRes : defImageRes); onCheckedChangeListener.onCheckedChanged(this, checked); } public void setOnCheckedChangeListener(OnCheckedChangeListener onCheckedChangeListener) { this.onCheckedChangeListener = onCheckedChangeListener; } public static interface OnCheckedChangeListener { void onCheckedChanged(View buttonView, boolean isChecked); } }
добавить этот attrib -
<declare-styleable name="CheckBoxImageView"> <attr name="default_img" format="integer"/> <attr name="checked_img" format="integer"/> <attr name="checked" format="boolean"/> </declare-styleable>
использовать как -
<com.adonta.ziva.consumer.wrapper.CheckBoxImageView xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/checkBox" android:layout_width="40dp" android:layout_height="40dp" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:clickable="true" android:padding="5dp" app:checked_img="@drawable/check_box_checked" app:default_img="@drawable/check_box" />
это исправит все ваши porblems.
res/drawable / day_selector.xml
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android" > <item android:drawable="@drawable/dayselectionunselected" android:state_checked="false"/> <item android:drawable="@drawable/daysselectionselected" android:state_checked="true"/> <item android:drawable="@drawable/dayselectionunselected"/> </selector>
res / layout / my_layout.xml
<CheckBox android:id="@+id/check" android:layout_width="39dp" android:layout_height="39dp" android:background="@drawable/day_selector" android:button="@null" android:gravity="center" android:text="S" android:textColor="@color/black" android:textSize="12sp" />
другой вариант-использовать ToggleButton С нулевым фоном и пользовательская кнопка.
Ниже приведен пример, который включает в себя селектор для цвета текста, а также.
<ToggleButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:button="@drawable/toggle_selector" android:background="@null" android:paddingLeft="10dp" android:layout_centerHorizontal="true" android:gravity="center" android:textColor="@drawable/toggle_text" android:textOn="My on state" android:textOff="My off state" />
toggle_selector.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/state_on" /> <item android:drawable="@drawable/state_off" /> </selector>
toggle_text.xml
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_checked="true" android:color="@color/app_color" /> <item android:color="@android:color/darker_gray" /> </selector>
Если вы используете пользовательские адаптеры, чем android: focusable= "false"и android:focusableInTouchMode=" false " являются nessesury, чтобы сделать элементы списка кликабельными при использовании флажка.
<CheckBox android:id="@+id/checkbox_fav" android:focusable="false" android:focusableInTouchMode="false" android:layout_width="wrap_content" android:layout_height="wrap_content" android:button="@drawable/checkbox_layout"/>
в drawable>checkbox_layout.XML-код"
<selector xmlns:android="http://schemas.android.com/apk/res/android" > <item android:drawable="@drawable/uncked_checkbox" android:state_checked="false"/> <item android:drawable="@drawable/selected_checkbox" android:state_checked="true"/> <item android:drawable="@drawable/uncked_checkbox"/> </selector>