कस्टम चेकबॉक्स छवि Android


182

क्या चेकबॉक्स के लिए कस्टम छवि का उपयोग करने का एक आसान तरीका है? मैं जीमेल के "तारांकित" व्यवहार की नकल करना चाह रहा हूं। इसलिए मैं एक चेकबॉक्स रखना चाहता हूं, जब चेक किया जाता है, स्टार में भरा हुआ है। और जब अनियंत्रित एक खाली सितारा है। क्या मुझे एक इमेजव्यू का उपयोग करना होगा और अपना तर्क खुद करना होगा?

जवाबों:


128

चेकबॉक्स बटन के बच्चे होने के नाते आप अपने चेकबॉक्स को एक पृष्ठभूमि छवि दे सकते हैं, जैसा कि यहां वर्णित है , "बटन शैली" के अंतर्गत:

... और यहाँ अनुकरणीय है :


26
धन्यवाद, मैं वास्तव में पाया कि वास्तव में क्या मैं यहाँ की जरूरत it-ride.blogspot.com/2010/04/... लेकिन मैं अगर मैं एक चाहता था यह आपके तरीके से करना पड़ता था असली कस्टम छवि = पी
Falmarri

2
धन्यवाद। बिल्कुल वही, जिसकी मुझे तलाश थी - मैंने पूरे राज्य का पता लगा लिया है, लेकिन मैं एंड्रॉइड सेट कर रहा हूं: एंड्रॉइड के बजाय पृष्ठभूमि: बटन और इसके बजाय 2 बटन के साथ समाप्त हुआ। अब यह सब अच्छी तरह से काम करता है।
आर्टेम रसाकोवस्की

1
-1। android:buttonनीचे समाधान बहुत पृष्ठभूमि विशेषता का उपयोग की तुलना में बेहतर है!
ओरबग

8
@ Orab .g: यह गिरावट गलत है। सवाल पूरी तरह से उत्तर दिया गया है ("कस्टम चेकबॉक्स छवि")। यह तथ्य कि इस विशेष तारांकित बटन के लिए एक शॉर्टकट मौजूद है, इस उत्तर को अमान्य नहीं करता है।
१५

हालांकि यह शायद एक पुरानी पोस्ट है, यह जोड़ना चाहते हैं कि एंड्रॉइड स्टूडियो भी एंड्रॉइड का उपयोग करता है: बटन = "@ android: drawable / btn_star" विधि
एंग्री 84

288

एक ड्रॉबल चेकबॉक्स चयनकर्ता बनाएं:

<?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" />

आप इस चयनकर्ता को किस रिकॉर्ड में निर्दिष्ट करते हैं? XML फ़ाइल के भीतर ही आप चेकबॉक्स को भी निर्दिष्ट कर रहे हैं?
टॉम हैमोंड

टॉम: लेआउट फ़ोल्डर में ड्रॉबल फोल्डर और चेकबॉक्स में अपना चयनकर्ता बनाएं
मोहम्मद हिशाम इब्न हनीफा

मुझे चेकबॉक्स में ´button´ के लिए ´button´ बदलना पड़ा
फ्रांसिस्को

पैडिंग के लिए देखें stackoverflow.com/questions/4037795/…
PiTheNumber

2
मैंने अपने प्रोजेक्ट को android x में अपग्रेड कर दिया है, उसके बाद मैं अपना चेकबॉक्स कस्टमाइज़ नहीं कर सका जैसा कि आपने एपीआई लेवल 21 और एंड्रॉइड से पहले कहा था: बटन काम नहीं करता।
मिस्साग अगखनी

44

Btn_check.xml को एंड्रॉइड-एसडीके / प्लेटफॉर्म / एंड्रॉइड से कॉपी करें - # / डेटा / रेज / अपने प्रोजेक्ट के ड्रॉबल फ़ोल्डर में ड्रा करने योग्य है और 'कस्टम' और 'ऑफ' छवि को अपनी कस्टम छवियों में बदलें।

तब आपके 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:button="@android:drawable/..."


2
बुरी सलाह। आइकन को संस्करण से संस्करण में बदला जा सकता है और बिल्कुल गायब हो सकता है। यदि आप वास्तव में डिफ़ॉल्ट आइकन पसंद करते हैं, तो आप इसे स्रोतों से ले सकते हैं।
कोर्निल्टसेव अनातोली

क्या आप सीधे "@ थायरॉइड: ड्रॉएबल / ..." के माध्यम से डिफॉल्ट आइकॉन को संदर्भित कर रहे हैं या यह पूरी तरह से एक बुरा विचार है?
WOUNDEDStevenJones

2
उदाहरण: होलो आइकन का संदर्भ आपके ऐप को प्री-हनीकॉम्ब उपकरणों पर क्रैश कर देगा। ऐसी परेशानियों को बनाए रखना और उन पर बहस करना वास्तव में मुश्किल है। इसलिए मैं आमतौर पर न केवल एक्सएमएल की नकल करता हूं, बल्कि छवियों को भी हंड्रेड प्रतिशत होने के लिए सुनिश्चित करें कि संसाधन मिल जाएंगे। इसके अलावा यह सुनिश्चित करने के लिए बहुत महत्वपूर्ण है कि यूआई हर डिवाइस पर समान दिखे।
कोर्निल्टसेव अनातोली

15

रेस / 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>

रेस / लेआउट / 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" />

1
कुछ स्पष्टीकरण नए उपयोगकर्ताओं को यह समझने में मदद करेंगे कि आपका कोड समस्या को कैसे हल करता है।
ब्रायन टॉम्पसेट -

7

यदि आपके पास एंड्रॉइड ओपन सोर्स कोड है, तो आप इसके तहत शैलियों की परिभाषा पा सकते हैं:
src / चौखटे / आधार / कोर / Res / Res / मान

<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>

4

कोशिश करो -

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);
    }
}

इस अट्रिब को जोड़ें -

<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" />

यह आपके सभी छिद्रों को ठीक कर देगा।


यह याद आ रहा है onSaveInstanceState()- onRestoreInstanceState()विधियाँ, मुझे लगता है कि जाँच की गई स्थिति रोटेशन पर खो जाएगी
EpicPandaForce

2

एक अन्य विकल्प नल पृष्ठभूमि और एक कस्टम बटन के साथ टॉगलबटन का उपयोग करना है ।

ऐसे उदाहरण का चयन करें जिसमें पाठ रंग के साथ चयनकर्ता भी शामिल हो।

<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>

2

यदि आप कस्टम एडेप्टर का उपयोग कर रहे हैं android:focusable="false"और android:focusableInTouchMode="false"चेकबॉक्स का उपयोग करते समय सूची आइटम को क्लिक करने योग्य बनाने के लिए nesesury हैं।

<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>

1

यदि आप androidx.appcompat: appcompat का उपयोग करते हैं और नए प्लेटफ़ॉर्म संस्करणों के अलावा पुराने प्लेटफ़ॉर्म संस्करणों पर काम करने के लिए एक कस्टम ड्रॉबल (प्रकार के selectorसाथ android:state_checked) चाहते हैं, तो आपको उपयोग करने की आवश्यकता है

    <CheckBox
        app:buttonCompat="@drawable/..."

के बजाय

    <CheckBox
        android:button="@drawable/..."

1

एनसेलिक और राहुल के जवाबों के आधार पर।

यह मेरे लिए काम करता है (पहले और बाद में एपीआई 21):

<CheckBox
    android:id="@+id/checkbox"
    android:layout_width="40dp"
    android:layout_height="40dp"
    android:text=""
    android:gravity="center"

    android:background="@drawable/checkbox_selector"
    android:button="@null"
    app:buttonCompat="@null" />
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.