2011-03-16 12 views
14

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

+0

आप कोड आप छवि बटन बनाने के लिए उपयोग कर रहे हैं दिखा सकते हैं? – Cristian

उत्तर

29

यह वास्तव में करना बहुत मुश्किल नहीं है। आपको 2 अलग-अलग .png फ़ाइलों या उसके जैसी कुछ भी बनाने की आवश्यकता नहीं है। उदाहरण के लिए, यदि आप एक बटन जो एक ढाल है है, और फिर इसे बदलना चाहते हैं बटन दबाया जाता है जब:

चरण 1:

<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle"> 
    <corners android:radius="3dp" /> 
    <gradient android:endColor="#8ba0bb" android:startColor="#43708f" android:angle="90" /> 
    <stroke android:width="1dp" android:color="#33364252" /> 
</shape> 
: डिफ़ॉल्ट बटन ढाल (drawable/default_button.xml) बनाएं

चरण 2: डिफ़ॉल्ट बनाएं बटन दबाया ढाल (drawable/default_button_pressed.xml):

<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle"> 
    <corners android:radius="3dp" /> 
    <gradient android:endColor="#43708f" android:startColor="#8ba0bb" android:angle="90" /> 
    <stroke android:width="1dp" android:color="#33364252" /> 
</shape> 

चरण 3: चयनकर्ता (drawable/default_button_selector.xml) बनाएँ:

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

चरण 4 (वैकल्पिक): (मान/style.xml) बटन के लिए शैली बनाएँ:

<resources> 
    <style name="DefaultButton"> 
     <item name="android:layout_width">wrap_content</item> 
     <item name="android:layout_height">wrap_content</item> 
     <item name="android:background">@drawable/default_button_selector</item> 
    </style> 
</resources> 

चरण 5: बटन (लेआउट/main.xml) का उपयोग करें:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" android:layout_height="fill_parent"> 

    <button style="@style/DefaultButton" /> 

</RelativeLayout> 

जैसा कि आप देख सकते हैं, यह करना विशेष रूप से कठिन नहीं है।

+19

lol @Zack 'जैसा कि आप देख सकते हैं, विशेष रूप से करना मुश्किल नहीं है। –

+2

यह अच्छा है क्योंकि आप इस शैली का उपयोग करके आसानी से कई बटन जोड़ सकते हैं। –

+4

क्या होगा यदि हमें विभिन्न पृष्ठभूमि छवियों के साथ बटन चाहिए? इस ठोस समाधान के लिए – Kishore

2

प्रत्येक बटन के लिए कई ड्रॉ करने योग्य सेट करने के क्रम में मैंने टच श्रोता में छवि बटन का रंग फ़िल्टर विशेषता सेट नहीं की है।

एक और पोस्ट में यहाँ कोड देखें:

https://stackoverflow.com/a/14278790/891479

+0

+1। –

18

कई छवियों (दबाया, सामान्य आदि) बनाने के लिए होने और यहां तक ​​कि चयनकर्ता बनाने के लिए की जरूरत नहीं है के बिना। setOnClickListener के बजाय setOnTouchListener का उपयोग करें। नीचे दिया गया कोड आपको क्लिक किए गए आइटम पर ग्रे ओवरले देगा।

((ImageButton)findViewById(R.id.myImageBtn)).setOnTouchListener(new OnTouchListener() { 

     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      switch (event.getAction()) { 
      case MotionEvent.ACTION_DOWN: { 
       ImageButton view = (ImageButton) v; 
       view.getBackground().setColorFilter(0x77000000, PorterDuff.Mode.SRC_ATOP); 
       v.invalidate(); 
       break; 
      } 
      case MotionEvent.ACTION_UP: 

       // Your action here on button click 

      case MotionEvent.ACTION_CANCEL: { 
       ImageButton view = (ImageButton) v; 
       view.getBackground().clearColorFilter(); 
       view.invalidate(); 
       break; 
      } 
      } 
      return true; 
     } 
    }); 
+1

यह मेरे लिए काम किया। ACTION_UP पर रंग फ़िल्टर को साफ़ करना सुनिश्चित करें। –

+0

मेरे एडीटी को पता नहीं था कि 'पोर्टरडफ' क्या था, संकेतित कोड पूर्ण होने के लिए 'android.graphics' (android.graphics.PorterDuff.Mode.SRC_ATOP) के साथ प्रत्यय – 1owk3y

+0

मुझे बहुत मदद मिली, धन्यवाद! ACTION_UP के मामले में –

2

मैं ऐसा करने में कामयाब रहा !! सबसे पहले आप बटन Style.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/button_pressed" /> 

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

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

तो फिर तुम drawable फ़ोल्डर में button_pressed.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/semiTransparentGnfrBlueColor" /> 
    <stroke android:width="10dp" android:color="@android:color/transparent" /> 
</shape> 

उसके बाद, आप drawable फ़ोल्डर में button_normal.xml पैदा करते हैं।

<?xml version="1.0" encoding="UTF-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
     android:innerRadiusRatio="3" 
    android:shape="rectangle"> 
    <solid android:color="@color/gnfrBlueColor"/> 
    <stroke android:width="10dp" android:color="@android:color/transparent" /> 
</shape> 

आप डिफ़ॉल्ट रंगों का उपयोग कर सकते हैं, लेकिन अगर तुम मुझे पसंद करना चाहते हैं, तो आप रंग नाम की एक फ़ाइल की आवश्यकता है।मूल्यों फ़ोल्डर में एक्सएमएल और अंदर यह मान:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
<item name="gnfrBlueColor" type="color">#2A3748</item> 
    <item name="semiTransparentGnfrBlueColor" type="color">#602A3748</item> 
<integer-array name="androidcolors"> 
<item>@color/gnfrBlueColor</item> 
    <item>@color/semiTransparentGnfrBlueColor</item> 
    </integer-array> 
</resources> 

अंत में आप अपने बटन या जो कुछ भी करने के लिए इस सेट:

savedAccountLoginButton.SetBackgroundResource(Resource.Drawable.buttonStyle); 

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

यह एकमात्र तरीका है जिसे मैं इस प्रोग्रामेटिक रूप से हासिल कर सकता हूं।

आप XML द्वारा ऐसा करने के लिए करना चाहते हैं:

<Button 
      android:text="ENTRAR" 
      android:layout_width="match_parent" 
      android:layout_height="60dp" 
      android:background="@drawable/buttonstyle" 
      android:textColor="@color/white" 
      android:textSize="18sp" 
      android:id="@+id/button1" /> 
संबंधित मुद्दे