কাস্টম চেকবক্স চিত্র অ্যান্ড্রয়েড


182

চেকবক্সের জন্য কাস্টম চিত্র ব্যবহার করার কোনও সহজ উপায় আছে? আমি জিমেইলের "তারকাচিহ্নিত" আচরণের সদৃশ খুঁজছি। সুতরাং আমি একটি চেকবাক্স রাখতে চাই যা চেক করা হলে তারা একটি ভরাট তারকা। এবং যখন চেক না করা হয় তখন একটি খালি তারা। আমাকে কী একটি চিত্রদর্শন ব্যবহার করতে হবে এবং নিজের যুক্তিটি নিজেই করতে হবে?

উত্তর:


128

চেকবক্সগুলি বাটনের বাচ্চা হওয়ায় আপনি "বাটন শৈলী" এর অধীনে এখানে বর্ণিত কয়েকটি রাজ্যের সাথে আপনার চেকবক্সকে একটি পটভূমি চিত্র দিতে পারেন :

... এবং এখানে উদাহরণ :


26
ধন্যবাদ, আমি আসলে এখানে আমার যা প্রয়োজন ঠিক ঠিক তা পেয়েছি এটি- ride.blogspot.com/2010/04/… তবে যদি আমি একটি সত্যিকারের কাস্টম চিত্র চাইতাম তবে আমি আপনাকে আপনার পন্থায় এটি করতে হত = পি
ফলমারি

2
ধন্যবাদ. হুবহু আমি যা খুঁজছিলাম - আমি পুরো রাজ্যের জিনিসটি বের করেছি তবে আমি অ্যান্ড্রয়েড: ব্যাকগ্রাউন্ডের পরিবর্তে অ্যান্ড্রয়েড: বোতামটি সেট করেছি এবং তার পরিবর্তে 2 টি বোতাম দিয়ে শেষ করেছি। এখন এটি সব ভাল কাজ করে।
আর্টেম রাশাকোভস্কিই

1
-1। android:buttonনিচে সমাধান অনেক পটভূমি অ্যাট্রিবিউট ব্যবহার করে চেয়ে ভাল!
ওরাব্যাগ

8
@ ওরাবাগ: এই ডাউনভোটটি ভুল। প্রশ্নের পুরোপুরি উত্তর দেওয়া হয়েছে ("কাস্টম চেকবক্স চিত্র")। এই নির্দিষ্ট তারকাযুক্ত-বোতামটির জন্য একটি শর্টকাট উপস্থিত রয়েছে তা এই উত্তরটিকে বাতিল করে না।
ereOn

এটি সম্ভবত কোনও পুরানো পোস্টের সাথে যুক্ত করতে চাইবেন যে অ্যান্ড্রয়েড স্টুডিওতেও অ্যান্ড্রয়েড: বোতাম = "@ অ্যান্ড্রয়েড: অঙ্কনযোগ্য / বিটিএন_স্টার" পদ্ধতি ব্যবহার করা হয়েছে
রাগান্বিত 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" />

আপনি এই রেকর্ডারে কোন রেকর্ডটি নির্দিষ্ট করেছেন? এক্সএমএল ফাইলের মধ্যেই আপনি যেখানে চেকবক্সটি উল্লেখ করছেন?
টম হ্যামন্ড

টম: আপনার নির্বাচককে অঙ্কনযোগ্য ফোল্ডারে এবং লেআউট ফোল্ডারে চেকবক্স তৈরি করুন
মোহাম্মদ হিশাম ইবনে হানিফা

আমাকে চেকবক্সে "ব্যাকগ্রাউন্ড" এর জন্য "বাটন" পরিবর্তন করতে হয়েছিল
ফ্রান্সিসকো

প্যাডিং দেখুন stackoverflow.com/questions/4037795/...
PiTheNumber

2
আমি আমার প্রকল্পটি অ্যান্ড্রয়েড এক্সে আপগ্রেড করেছি তার পরে আমি আমার চেকবক্সটি কাস্টমাইজ করতে পারিনি যেমন আপনি এপিআই লেভেল 21 এবং অ্যান্ড্রয়েডের আগে বলেছিলেন: বোতামটি কাজ করে না।
মিশাঘা আগাখানি

44

অ্যান্ড্রয়েড-এসডিকে / প্ল্যাটফর্ম / অ্যান্ড্রয়েড থেকে বিটিএন_চেক.এক্সএমএল অনুলিপি করুন - # / ডেটা / রেজ / আপনার ছবিটির আঁকাযোগ্য ফোল্ডারে অঙ্কনযোগ্য এবং 'অন' এবং 'অফ' চিত্রটি আপনার কাস্টম চিত্রগুলিতে পরিবর্তন করুন।

তারপরে আপনার এক্সএমএল প্রয়োজন হবে 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

মাঝামাঝি / অঙ্কনযোগ্য / 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
কিছু ব্যাখ্যা নতুন ব্যবহারকারীদের বুঝতে সাহায্য করবে যে কীভাবে আপনার কোড সমস্যা সমাধান করে।
ব্রায়ান টম্পसेट - :5 汤

7

আপনার যদি অ্যান্ড্রয়েড ওপেন সোর্স কোড থাকে তবে আপনি শৈলীর সংজ্ঞাটি নীচে খুঁজে পেতে পারেন:
src / ফ্রেমওয়ার্ক / বেস / কোর / রেজ / রাইজ / মানগুলি

<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()পদ্ধতিগুলি অনুপস্থিত , আমি মনে করি চেক করা রাষ্ট্রটি
ঘোরার সময়

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"যদি নেসেসারি হন।

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

ইন অঙ্কনযোগ্য> 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" />
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.