बटन के लिए एक साथ आकार और चयनकर्ता कैसे लागू करें?


83

मैंने एक बटन के लिए एक आकृति लागू की है जैसे:

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

<shape xmlns:android="http://schemas.android.com/apk/res/android"
       android:shape="rectangle" >
    <gradient android:startColor="#DD000000" android:endColor="#DD2d2d2d"  android:angle="90"></gradient>
    <corners android:radius="15dip"></corners>

</shape>

अब मैं एक चयनकर्ता का उपयोग करना चाहता हूं:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/active"
      android:state_pressed="true" />
<item android:drawable="@drawable/passive"/>

इस बटन के लिए भी। क्या यह संभव है ...???

जवाबों:


186

इस तरह से उपयोग करें:

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

   <item android:state_pressed="true" >
       <shape>.......</shape>
   </item>
   ..........
   ..........
</selector>

8
हां, इसका उपयोग करके काम किया: <selector xmlns: android = " schemas.android.com/apk/res/android "> <आइटम android: state_pressed = "true"> <size android: shape = "rectangle"> "कोनों android" : त्रिज्या = "15dip"> </ कोनों> <ठोस एंड्रॉइड: रंग = "# febd26" /> </ आकार> </ आइटम> <आइटम> <आकार एंड्रॉइड: आकार = "आयत"> <ग्रेडिएंट = स्टार्टरकल = "# DD000000" Android: endColor = "# DD2d2d2d" android: angle = "90"> </ gradient> <कोनों android: त्रिज्या = "15dip"> </ कोनों> </ आकार> </ आइटम> </ चयनकर्ता>
खरवार रजा

7
@KhawarRaza भविष्य में, कृपया अपने प्रश्न में इस तरह की जानकारी डालें , जहाँ इसे प्रारूपित किया जा सके और अधिक आसानी से पाया जा सके। टिप्पणियाँ समय के साथ लुप्त हो जाती हैं।
टिम पोस्ट

मैंने आपके द्वारा सुझाए गए आइटम तत्व के अंदर एक आकृति तत्व जोड़ने की कोशिश की, लेकिन यह सिर्फ एक संदेश के साथ त्रुटियां करता है 09-13 15:25:02.868: ERROR/AndroidRuntime(9129): FATAL EXCEPTION: main android.view.InflateException: Binary XML file line #13: Error inflating class <unknown>. जो चयनकर्ता को android:backgroundएक RoundedImageView[ github.com/vinc3m1/RoundedImageView##age] की विशेषता के रूप में सेट करने में मदद नहीं करता है । क्या किसी को यह करने का कोई विचार है?
टोब्स्को 42

जब इस तकनीक का उपयोग करने का प्रयास किया गया, तो मुझे एक त्रुटि संदेश मिला। मेरे लिए AZ_ के जवाब ने बेहतर काम किया।
एलन नेल्सन

@ एलन नेल्सन, मेरा जवाब सिर्फ कंकाल है, जबकि AZ_ ने उदाहरण दिया है।
हैनरी

26

बिंदु उत्तर के लिए विस्तृत

में एक रंग संसाधन बनाएँ

res / values ​​/ colors.xml

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


    <item name="yellow" type="color">#F7B500</item>
    <item name="yellow_dark" type="color">#AC7E00</item>

    <integer-array name="androidcolors">
        <item>@color/yellow</item>
        <item>@color/yellow_dark</item>
    </integer-array>

</resources>

पर एक drawable बनाएँ

रेस / drawable / bg_yellow_round.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle" >

    <solid android:color="@color/yellow" />

    <stroke
        android:width="2dp"
        android:color="@color/yellow" />

    <corners
        android:bottomLeftRadius="20dp"
        android:bottomRightRadius="20dp"
        android:topLeftRadius="20dp"
        android:topRightRadius="20dp" />

</shape>

एक और ड्रा करने योग्य बनाएं, आप उसी स्थान पर संक्रमण चाहते हैं और उसे नाम दें

रेस / drawable / bg_yellow_dark_round.xml

<solid android:color="@color/yellow_dark" />

<stroke
    android:width="2dp"
    android:color="@color/yellow_dark" />

<corners
    android:bottomLeftRadius="20dp"
    android:bottomRightRadius="20dp"
    android:topLeftRadius="20dp"
    android:topRightRadius="20dp" />

अब एक बनाने के रंग राज्य सूची में

रेस / रंग / btn_selector_yellow.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" android:exitFadeDuration="@android:integer/config_shortAnimTime">

    <item android:drawable="@color/yellow" android:state_focused="true" android:state_pressed="false"/>
    <item android:drawable="@drawable/bg_yellow_dark_round" android:state_pressed="true"/>
    <item android:drawable="@drawable/bg_yellow_round"/>

</selector>

अब इसे अपने बटन पर निम्नानुसार सेट करें

<Button
                android:id="@+id/button1"
                android:layout_width="248dp"
                android:layout_height="44dp"
                android:layout_gravity="center_horizontal"
                android:layout_marginBottom="10dp"
                android:layout_marginTop="20dp"
                android:background="@color/btn_selector_yellow"
                android:text="AZ_ is so cool" />

अब इस संक्रमण हो जाएगा से पीली रोशनी

सेवा

गहरा पीला


यह काम करता है, क्या आप इसे लहर प्रभाव के लिए लागू करने के लिए मार्गदर्शन कर सकते हैं?
हार्दिक 9850


या बस यह देखें कि कई google.com/… हैं
AZ_

11

shape.xml

<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="@color/star_off"/>
    <corners android:radius="5dp"/>
    <padding android:left="0dp" android:top="0dp" android:right="0dp" android:bottom="0dp" />
</shape>

selector.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android" android:exitFadeDuration="@android:integer/config_mediumAnimTime">

    <item android:drawable="@color/tab_focused" android:state_focused="true" android:state_pressed="false"/>
    <item android:drawable="@color/tab_pressed" android:state_pressed="true"/>
    <item android:drawable="@drawable/shape"/>

</selector>

1
@ drawable / shape.xml के बजाय @ drawable / shape का उपयोग करें
हयात

4

आप एक आकार भी बना सकते हैं जो चयनकर्ता का उपयोग कर रहा है। यदि आपकी आकृति अलग-अलग राज्यों में अपना रंग बदल रही है, तो यह बहुत साफ है।

रंग / color_selector.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="@color/blue_dark" android:state_pressed="true" />
    <item android:color="@color/blue_light" />
</selector>

drawable / shape.xml

<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="@color/color_selector" />
    <corners android:bottomLeftRadius="6dip" android:bottomRightRadius="6dp" />
    <padding android:bottom="0dip" android:left="0dip" android:right="0dip" android:top="0dip" />
</shape>

यह मेरे लिए काम नहीं करता है, रंग में चयनकर्ता का उपयोग कभी नहीं किया जाता है ... हालांकि मैं मानता हूं कि यह बहुत क्लीनर है
गोमे सिप

@ यह काम कर रहा है। इस लिंक को देखें stackoverflow.com/questions/1219312/android-selector-text-color
Ji Fang

3
मुझे पता है कि यह पुराना है, लेकिन सिर्फ रिकॉर्ड के लिए, यह विधि केवल एंड्रॉइड 5.0 और उच्चतर में काम करती है।
सिंह

4

वैसे मुझे पता है कि यह बहुत देर हो चुकी है लेकिन यहाँ एक हल किया गया उदाहरण है

 <TextView
            android:id="@+id/txt_out_going_calls"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_margin="04dp"
            android:layout_weight="1"
            android:background="@drawable/header_text_view_selector"
            android:gravity="center"
            android:text="@string/outgoing_calls_tab_button_text"
            android:textColor="@color/home_text_color" />

और मेरा header_text_view_selector

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

        <shape xmlns:android="http://schemas.android.com/apk/res/android">
            <solid android:color="@color/home_fragment_tab_color_selected"/>
            <corners android:radius="25dip" />
            <padding android:bottom="08dip" android:left="9dip" android:right="9dip" android:top="08dip" />
        </shape>
    </item>
    <item android:state_selected="false">

        <shape>
            <solid android:color="@color/home_fragment_tab_color_simple"/>
            <corners android:radius="25dip" />
            <padding android:bottom="08dip" android:left="9dip" android:right="9dip" android:top="08dip" />
        </shape>
    </item>
</selector>

इसलिए मूल रूप textviewसे चयनकर्ता के साथ एक राउंड बना रहे हैं। यहाँ केवल हैंडलिंग state_selectedऔर not_selected। आशा करता हूँ की ये काम करेगा


3

यह मेरा तरीका है, और यह काम करता है!

<item android:state_pressed="true">

    <shape android:shape="oval">


        <gradient android:centerX=".6"
            android:centerY=".40"
            android:endColor="@color/colorPrimary"
            android:gradientRadius="20"
            android:startColor="@color/colorPrimary"
            android:type="radial" />

        <stroke android:width="1dp"
            android:color="#FFFFFF" />

        <size android:width="55dp"
            android:height="55dp" />

    </shape>
</item>

<item android:state_focused="false">
    <shape android:shape="oval">


        <gradient android:centerX=".6"
            android:centerY=".40"
            android:endColor="@android:color/transparent"
            android:gradientRadius="20"
            android:startColor="@android:color/transparent"
            android:type="radial" />

        <stroke android:width="1dp"
            android:color="#FFFFFF" />

        <size android:width="55dp"
            android:height="55dp" />

    </shape>
</item>


0

अपने आकार के नाम का उपयोग करें क्योंकि आप किसी भी छवि का उपयोग करते हैं और जैसे ही आप छवि का उपयोग करते हैं उसका चयन करें। कोशिश करें कि आपको किसी समस्या का सामना न करना पड़े। क्या आप जो पूछ रहे थे?


2
अपना आकार xml को ड्रा करने योग्य में रखें और इसे पास करें android: drawable = "@ drawable / shape_xml" अपने चयनकर्ता में और अपने चयनकर्ता का उपयोग अपने विचार में करें ....
Vineet Shukla

1
कृपया कोड स्निपेट के साथ अपने उदाहरण को बेहतर रूप में लिखें।
रॉय ली

0

मेरा उदाहरण State_pressed के साथ एक सर्कल बटन है। कोड bellow:

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


    <item android:state_pressed="true">
        <shape android:shape="oval">
            <solid android:color="@color/light_primary_color" />
        </shape>

    </item>
    <item>
        <shape android:shape="oval">
            <solid android:color="@color/accent_color" />
        </shape>
    </item>

</selector>

0

अधिक पुन: प्रयोज्य होने के लिए, आप एकल गुणों पर राज्यों को सेट कर सकते हैं। अपनी आकृतियों की नक़ल करने से बचें

<selector
    xmlns:android="http://schemas.android.com/apk/res/android"
>
    <item>
        <shape android:shape="rectangle" >
            <corners android:radius="5dp"/>
            <solid
                android:state_enabled="false"
                android:color="@color/transparent"
            />
            <solid
                android:state_enabled="true"
                android:color="@color/background"
            />
            <stroke
                android:width="@dimen/dividerHeight"
                android:color="@color/dividerLight"
            />
        </shape>
    </item>
</selector>

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


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