android - selectableItemBackground विशेषता का उपयोग करते समय बटन पृष्ठभूमि के लिए एक कस्टम रंग का उपयोग कर




android-layout (4)

मैं उपयोग करने की कोशिश कर रहा हूँ

android:background="?android:attr/selectableItemBackground"

मेरे बटन को प्रत्येक एंड्रॉइड संस्करण जैसे रिपिप्लिंग आदि के लिए उचित प्रभाव करने के लिए प्राप्त करने के लिए।

लेकिन जब मुझे एक अलग रंग की आवश्यकता होती है तो यह भूरे रंग के रंग के साथ एक बटन उत्पन्न करता है।

मैं इस डिफ़ॉल्ट रंग को ओवरराइड कैसे कर सकता हूं?


इस विधि का उपयोग करके, आप लहर प्रभाव रंग को अनुकूलित कर सकते हैं। सबसे पहले, आपको अपनी ड्रॉबल संसाधन निर्देशिका में एक XML फ़ाइल बनाना होगा। एक ripple_effect.xml फ़ाइल बनाएँ और निम्न कोड जोड़ें। मैं लाल रंग के रूप में पृष्ठभूमि रंग का उपयोग करें।

रेस / drawable / ripple_effect.xml

<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:color="#af0c0e"
    tools:targetApi="lollipop">
    <item android:id="@android:id/mask">
        <shape android:shape="rectangle">
            <solid android:color="#af0c0e" />
        </shape>
    </item>
</ripple>

और ऊपर खींचने योग्य संसाधन फ़ाइल के लिए पृष्ठभूमि सेट करें। एक्सएमएल लेआउट गतिविधि का अंतिम कोड इस तरह दिखता है। रेस / लेआउट / ripple_animation.xml

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

<android.support.v7.widget.CardView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_marginLeft="6dp"
    android:layout_marginRight="6dp"
    android:layout_marginBottom="8dp"
    android:layout_marginTop="8dp"
    android:paddingBottom="30dp"
    app:cardBackgroundColor="#e7e7e7"
    android:id="@+id/cardview"
    xmlns:android="http://schemas.android.com/apk/res/android">
<LinearLayout
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:clickable="true"
    android:background="@drawable/ripple_effect">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:layout_marginRight="16dp"
        android:layout_marginLeft="16dp"
        android:paddingBottom="5dp">
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Pending"
                android:layout_weight="1"
                 android:layout_marginBottom="2dp"
                android:textSize="25dp"
                android:textColor="#d11010"
                android:id="@+id/txtpending" />
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Assigned to:"
                android:layout_marginLeft="20dp"
                android:textColor="#ff000000"
                android:id="@+id/txtassigned"
                android:layout_weight="1"/>
        </LinearLayout>
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical"
            android:paddingBottom="5dp"
            android:paddingTop="5dp"
            android:layout_marginLeft="16dp">
            <TextView
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:text="Student Name"
                android:id="@+id/txtstudentname"/>
            <TextView
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:text="Student Number"
                android:id="@+id/txtstudentnumber"/>

            <TextView
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:text="Parent Name"
                android:id="@+id/txtparentname"/>
            <TextView
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:text="Parent Number"
                android:id="@+id/txtparentnumber"/>
            <TextView
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:text="Transfer Status"
                android:id="@+id/txttransfer"/>

        </LinearLayout>
    </LinearLayout>
</LinearLayout>
    </android.support.v7.widget.CardView>

अब, लहर प्रभाव लाल रंग है।


उपयोग करने के बजाय? एंड्रॉइड: attr / selectableItemBackground आप निम्न सामग्री वाले फ़ोल्डर में ड्रॉबल में एक एक्सएमएल बना सकते हैं।

<item 
    android:state_pressed="true"
    android:drawable="@color/orange"/>
<item 
    android:state_enabled="false"
    android:drawable="@color/default"/>
<item
    android:drawable="@color/default"/>

</selector>
Updated: so you save this files as : btn_drawable.xml in drawable folder.

Simply replace ?android:attr/selectableItemBackground with *@drawable/btn_drawable.xml*

यदि आप बटन.जावा के स्रोत कोड को पढ़ते हैं तो आप देखेंगे कि यह TextView.java का उप-वर्ग है। मैंने प्रश्न में समस्या के लिए एक सरल कामकाज किया है।

<LinearLayout android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:clickable="true"
              android:background="#1f5050">

       <TextView android:layout_width="some_dp"
                 android:layout_height="some_dp"
                 android:id="@+id/button"
                 android:background="?android:selectableItemBackground" />

</LinearLayout>

कोड में:

button.setOnClickLisetener(new Onclicklistener() {
    // do your stuff here
}

अगर कोई टेक्स्टव्यू क्लास का विस्तार कर सकता है और फीचर के साथ एक कस्टम बटन बना सकता है तो यह बेहतर होगा।

नोट: मेरा minsdk 14. है 14. लॉलीपॉप लहर प्रभाव ठीक काम करता है


संपादित करें : अब AppCompat और backgroundTint का उपयोग करके यह संभव है

   android:backgroundTint="@color/yourColor"

पिछला समाधान:

मुझे एक ही समस्या थी और प्रोग्रामेटिक रूप से ऐसा करना समाप्त हो गया:

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        ColorStateList colors = new ColorStateList(new int[][]{
                new int[]{android.R.attr.state_enabled},
        }, new int[]{pressed});
        GradientDrawable item = new GradientDrawable();
        item.setCornerRadius(radius);
        item.setColor(normal);
        RippleDrawable ripple = new RippleDrawable(colors, item, null);
        button.setBackgroundDrawable(ripple);
    } else {
        StateListDrawable stateListDrawable = new StateListDrawable();
        GradientDrawable item;
        item = new GradientDrawable();
        item.setCornerRadius(radius);
        item.setColor(pressed);
        stateListDrawable.addState(new int[]{android.R.attr.state_enabled, android.R.attr.state_pressed}, item);
        item = new GradientDrawable();
        item.setCornerRadius(radius);
        item.setColor(normal);
        stateListDrawable.addState(new int[]{android.R.attr.state_enabled}, item);
        button.setBackgroundDrawable(stateListDrawable);
    }




android-layout