क्लिक करने पर Android में बटन का रंग कैसे बदलें?


82

मैं Android एप्लिकेशन पर काम कर रहा हूं। मैं स्क्रीन के निचले भाग में 4 बटन रखना चाहता हूं। इन 4 बटन में 2 बटन उन पर चित्र बना रहे हैं। बटनों की सीमा काले रंग की होनी चाहिए और सीमा यथासंभव पतली होनी चाहिए। जब मैं बटन पर क्लिक करता हूं, तो मैं चाहता हूं कि बटन की पृष्ठभूमि को नीले रंग में बदल दिया जाए बिना सीमा के रंग को बदल दिया जाए और कुछ समय तक उस रंग में बने रहना चाहिए। मैं एंड्रॉइड में इस परिदृश्य को कैसे प्राप्त कर सकता हूं?


बटन पर वेक्टर ड्रा करने योग्य पथ के रंग को बदलने के संभावित डुप्लिकेट पर क्लिक करें मैंने इसे डुप्लिकेट के रूप में चिह्नित किया, आप यहां मेरे उत्तर की जांच कर सकते हैं: stackoverflow.com/a/55205149/3763032
— mochadwi

जवाबों:


129

एक दृष्टिकोण इस तरह से एक XML फ़ाइल बनाने के लिए है drawable, जिसे भी कहा जाता है। xml :

<?xml version="1.0" encoding="utf-8"?> 
  <selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:state_focused="true"
        android:state_pressed="true"
        android:drawable="@drawable/bgalt" />

    <item
        android:state_focused="false"
        android:state_pressed="true"
        android:drawable="@drawable/bgalt" />

    <item android:drawable="@drawable/bgnorm" />
</selector>

bgaltऔर bgnormड्रॉबल में पीएनजी चित्र हैं।

यदि आप अपनी गतिविधि में प्रोग्राम को बटन बनाते हैं, तो आप पृष्ठभूमि को इसके साथ सेट कर सकते हैं:

final Button b = new Button (MyClass.this);
b.setBackgroundDrawable(getResources().getDrawable(R.drawable.whatever));

यदि आप XML के साथ अपने बटन की शैली सेट करते हैं, तो आप कुछ ऐसा करेंगे:

<Button
  android:id="@+id/mybutton"
  android:background="@drawable/watever" />

और अंत में एक ट्यूटोरियल का लिंक । उम्मीद है की यह मदद करेगा।


16
यदि आप छवियों का उपयोग करने से बचना चाहते हैं, तो आप उन ड्रॉबल्स को एक्सएमएल फाइल में रंगों की परिभाषाओं के साथ बदल सकते हैं।
— हैमेन

7
@ jshin47 परीक्षण और त्रुटि की एक सामान्य राशि। मैंने अब एंड्रॉइड डेवलपमेंट पर दो किताबें लिखी हैं :-)
— हैसमैन

@haseman - क्या आप उन 2 पुस्तकों के लिंक पोस्ट कर सकते हैं या मुझे brk0018@gmail.com पर साझा कर सकते हैं। उन लोगों के माध्यम से जाने और बेहतर सीखने के लिए खुशी होगी
— रामकृष्ण बला

1
क्या होगा अगर सिर्फ रंग नहीं छवियां?
— काला जे

@KalaJ आप एक समाधान मिल गया है?
— प्रफुल्ल कुमार साहू

75

इस कोड को "bg_button.xml" के साथ ड्रा करने योग्य फ़ोल्डर में सहेजें और अपने @ xml में बटन की पृष्ठभूमि के रूप में "@ drawable / bg_button" कॉल करें:

<?xml version="1.0" encoding="UTF-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" >
        <shape>
            <solid
                android:color="#004F81" />
            <stroke
                android:width="1dp"
                android:color="#222222" />
            <corners
                android:radius="7dp" />
            <padding
                android:left="10dp"
                android:top="10dp"
                android:right="10dp"
                android:bottom="10dp" />
        </shape>
    </item>
    <item>
        <shape>
            <gradient
                android:startColor="#89cbee"
                android:endColor="#004F81"
                android:angle="270" />
            <stroke
                android:width="1dp"
                android:color="#4aa5d4" />
            <corners
                android:radius="7dp" />
            <padding
                android:left="10dp"
                android:top="10dp"
                android:right="10dp"
                android:bottom="10dp" />
        </shape>
    </item>
</selector>

2
धन्यवाद आदमी, शैली का उपयोग करके आप आवेदन का आकार कम कर सकते हैं। अच्छा विचार न करने योग्य उपयोग करने के लिए
— राहुल मंडालिया

दूसरी ओर, xml वेक्टर-आधारित ड्रॉअल्स आमतौर पर छवियों की तुलना में प्रदर्शन के लिए बदतर होते हैं, खासकर पुराने उपकरणों पर। समय से पहले अनुकूलन न करें, लेकिन इसे भी ध्यान में रखें।
— ज़ेमीस्लॉ Jablonski

10

इसे इस्तेमाल करे

    final Button button = (Button) findViewById(R.id.button_id);
    button.setOnTouchListener(new View.OnTouchListener() {

        @Override
        public boolean onTouch(View view, MotionEvent event) {
            if(event.getAction() == MotionEvent.ACTION_UP) {
                button.setBackgroundColor(Color.RED);
            } else if(event.getAction() == MotionEvent.ACTION_DOWN) {
                button.setBackgroundColor(Color.BLUE);
            }
            return false;
        }

    });

9

इसे देखें,

boolean check = false;
Button backward_img;
Button backward_img1;
backward_img = (Button) findViewById(R.id.bars_footer_backward);
backward_img1 = (Button) findViewById(R.id.bars_footer_backward1);
backward_img.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View arg0) {
        check = true;
        backward_img.setBackgroundColor(Color.BLUE);
    }
});

if (check == true) {
    backward_img1.setBackgroundColor(Color.RED);
    backward_img.setBackgroundColor(Color.BLUE);
}

2
यह बीजी को स्थायी रूप से सेट करेगा, यानी अगर उपयोगकर्ता बैक बटन पर क्लिक करता है, तो पृष्ठभूमि लाल होगी।
— मेथोड

@ मीथोड: ठीक है नए उत्तर का संदर्भ दें मैंने पुराने पते को सही कर दिया है
— संकर गणेश पीएमपी

8
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- default -->
    <item
        android:state_pressed="false"
        android:state_focused="false">
        <shape
            android:innerRadiusRatio="1"
            android:shape="rectangle" >
            <solid android:color="#00a3e2" />

            <padding
                android:bottom="10dp"
                android:left="10dp"
                android:right="10dp"
                android:top="10dp" />

        </shape>
    </item>

    <!-- button focused -->
    <item
        android:state_pressed="false"
        android:state_focused="true">
        <shape
            android:innerRadiusRatio="1"
            android:shape="rectangle" >
            <solid android:color="#5a97f5" />

            <padding
                android:bottom="5dp"
                android:left="10dp"
                android:right="10dp"
                android:top="5dp" />
        </shape></item>

    <!-- button pressed -->
    <item
        android:state_pressed="true"
        android:state_focused="false">
        <shape
            android:innerRadiusRatio="1"
            android:shape="rectangle" >
            <solid android:color="#478df9"/>
            <padding
                android:bottom="10dp"
                android:left="10dp"
                android:right="10dp"
                android:top="10dp" />
        </shape></item>
</selector>

6

यदि आप दबाए जाने पर बैकग्राउंड छवि या बटन का रंग बदलना चाहते हैं, तो बस इस कोड को कॉपी करें और नीचे वर्णित सटीक स्थान पर अपनी परियोजना में पेस्ट करें।

      <!-- Create new xml file like mybtn_layout.xml file in drawable -->
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:drawable="@drawable/pressed" /> <!--pressed --> 
<item android:drawable="@drawable/normal" /> <!-- Normal -->
</selector>
  <!-- Now this file should be in a drawable folder and use this 
  single line code in    button code to get all the properties of this xml file -->

    <Button
      android:id="@+id/street_btn"
      android:layout_width="wrap_content"
      android:background="@drawable/layout_a" > <!-- your required code -->
    </Button>

4

इसे इस्तेमाल करे......

सबसे पहले एक xml फाइल बनाएं, जिसका नाम button_pressed.xml है। ये कंटेंट हैं।

<?xml version="1.0" encoding="utf-8"?>
<selector
  xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_focused="true" 
          android:state_pressed="false" 
          android:drawable="@drawable/icon_1" />
    <item android:state_focused="true" 
          android:state_pressed="true"
          android:drawable="@drawable/icon_1_press" />
    <item android:state_focused="false" 
          android:state_pressed="true"
            android:drawable="@drawable/icon_1_press" />
    <item android:drawable="@drawable/icon_1" />
</selector>

Noe अपने बटन पर यह कोशिश करो।

int imgID = getResources().getIdentifier("button_pressed", "drawable", getApplication().getPackageName());
button.setImageResource(imgID);

button_pressed.xml को ड्रा करने योग्य फ़ोल्डर में होना चाहिए। icon_1_press और icon_1 बटन प्रेस और सामान्य फ़ोकस के लिए दो चित्र हैं।


2

बटन के लिए 1-मेक 1 शेप दायीं ओर क्लिक करने योग्य ड्राडबल न्यू ड्रॉबल रिसोर्स फाइल पर क्लिक करें। रूट एलीमेंट को आकार देने के लिए बदलें और अपना आकार बनाएं।

यहाँ छवि विवरण दर्ज करें

2-अब अपने आकार से 1 कॉपी बनाएं और नाम बदलें और ठोस रंग बदलें। यहाँ छवि विवरण दर्ज करें

ड्रा करने योग्य और नई ड्रा करने योग्य संसाधन फ़ाइल पर 3-राइट क्लिक करें चयनकर्ता को रूट तत्व सेट करें।

फ़ाइल पर जाएं और "State_pressed" सेट करें

<selector xmlns:android="http://schemas.android.com/apk/res/android">

<item android:state_pressed="true"android:drawable="@drawable/YourShape1"/>
<item android:state_pressed="false" android:drawable="@drawable/YourShape2"/>

</selector>

4-अंत में xml लेआउट पर जाएं और अपनी बटन पृष्ठभूमि "अपना चयनकर्ता" सेट करें

(मेरी अंग्रेजी कमजोर के लिए खेद है)


1

मैं इस कोड का उपयोग कर रहा हूँ (लहर प्रभाव के साथ):

<ripple xmlns:android="http://schemas.android.com/apk/res/android" android:color="@color/color_gray">
<item android:id="@android:id/mask">
    <color android:color="@color/color_gray" />
</item></ripple>

1

अपनी समस्या को हल करने के लिए आप इस कोड को आज़मा सकते हैं

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:state_pressed="true"
   android:drawable="@drawable/login_selected" /> <!-- pressed -->
  <item android:state_focused="true"
   android:drawable="@drawable/login_mouse_over" /> <!-- focused -->
  <item android:drawable="@drawable/login" /> <!-- default -->
</selector>

इस कोड को अपने ड्रॉएबल में लिखें, एक नया संसाधन बनाएं और इसे नाम दें जो आप चाहते हैं और फिर इस ड्रोवेबल का नाम बटन में लिखें जैसे कि हम एंड्रॉइड में छवि src का संदर्भ देते हैं


1
hi सर @lmo मैंने प्रश्न के साथ कुछ स्पष्टीकरण दिया है।
— मुदस्सिर खान

1
public void onPressed(Button button, int drawable) {
            if (!isPressed) {
                button.setBackgroundResource(R.drawable.bg_circle);
                isPressed = true;
            } else {
                button.setBackgroundResource(drawable);
                isPressed = false;
            }
        }


    @Override
    public void onClick(View v) {

        switch (v.getId()) {
            case R.id.circle1:
                onPressed(circle1, R.drawable.bg_circle_gradient);
                break;
            case R.id.circle2:
                onPressed(circle2, R.drawable.bg_circle2_gradient);
                break;
            case R.id.circle3:
                onPressed(circle3, R.drawable.bg_circle_gradient3);
                break;
            case R.id.circle4:
                onPressed(circle4, R.drawable.bg_circle4_gradient);
                break;
            case R.id.circle5:
                onPressed(circle5, R.drawable.bg_circle5_gradient);
                break;
            case R.id.circle6:
                onPressed(circle6, R.drawable.bg_circle_gradient);
                break;
            case R.id.circle7:
                onPressed(circle7, R.drawable.bg_circle4_gradient);
                break;

        }

कृपया इसे आज़माएं, इस कोड में बटन पर बटन की पृष्ठभूमि को बदलने की कोशिश कर रहा है यह ठीक काम करता है।


0

आप कब तक अपने बटन को अपने अन्य रंग में रहना चाहते हैं, इस संस्करण की सलाह देने के लिए ठीक से काम करने के लिए:

button.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                switch(event.getAction()) {
                    case MotionEvent.ACTION_DOWN:
                        button.setBackground(getResources().getDrawable(R.drawable.on_click_drawable));
                        break;
                    case MotionEvent.ACTION_UP:
                        new java.util.Timer().schedule(
                                new java.util.TimerTask() {
                                    @Override
                                    public void run() {
                                        ((Activity) (getContext())).runOnUiThread(new Runnable() {
                                            @Override
                                            public void run() {
                                                button.setBackground(getResources().getDrawable(R.drawable.not_clicked_drawable));
                                            }
                                        });
                                    }
                                }, BUTTON_CLICK_TIME_AFTER_RELEASE_ANIMATION);
                        break;
                    default:
                }
                return false;
            }
        });

BUTTON_CLICK_TIME_AFTER_RELEASE_ANIMATION कितने समय के बाद इंगित करता है [ms] बटन पिछली स्थिति में रीसेट हो जाएगा (हालाँकि आप जाँचने के लिए कुछ बूलियन का उपयोग करना चाह सकते हैं कि बीच में बटन का उपयोग नहीं किया गया था, इस बात पर निर्भर करता है कि आप क्या हासिल करना चाहते हैं ...) ।


0

यहां तक ​​कि ऊपर की टिप्पणियों में से कुछ का उपयोग करने के लिए लंबे समय तक काम करना पड़ा जो आवश्यक होना चाहिए। उम्मीद है कि यह उदाहरण किसी और की मदद करता है।

ड्रा करने योग्य निर्देशिका में एक Radio_button.xml बनाएं।

    <?xml version="1.0" encoding="utf-8"?>

<!-- An element which allows two drawable items to be listed.-->
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_checked="true" android:drawable="@drawable/radio_button_checked" /> <!--pressed -->
    <item android:drawable="@drawable/radio_button_unchecked" /> <!-- Normal -->
</selector>

फिर टुकड़े के लिए xml में कुछ इस तरह दिखना चाहिए

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools">

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">
<RadioGroup
android:layout_width="match_parent"
android:layout_height="match_parent">

<RadioButton

    android:id="@+id/radioButton1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginLeft="10dp"
    android:layout_weight="1"
    android:button="@drawable/radio_button"
    android:paddingLeft="10dp" />        
<RadioButton
    android:id="@+id/radioButton2"
    android:layout_marginLeft="10dp"
    android:paddingLeft="10dp"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:button="@drawable/radio_button" />

</RadioGroup>
    </LinearLayout>
</layout>

-1

यह सबसे आसान तरीका है:

इस कोड को mainactivity.java में जोड़ें

public void start(View view) {

  stop.setBackgroundResource(R.color.red);
 start.setBackgroundResource(R.color.yellow);
}

public void stop(View view) {
stop.setBackgroundResource(R.color.yellow);
start.setBackgroundResource(R.color.red);
}

और फिर आपकी गतिविधि में मुख्य

    <button android:id="@+id/start" android:layout_height="wrap_content" android:layout_width="wrap_content" android:onclick="start" android:text="Click">

</button><button android:id="@+id/stop" android:layout_height="wrap_content" android:layout_width="wrap_content" android:onclick="stop" android:text="Click">

या इस ट्यूटोरियल का अनुसरण करें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.