आईओएस में, अगर मैं एक छवि के लिए एक बटन की पृष्ठभूमि निर्धारित करते हैं, जब मैं बटन दबाते हैं, (पाठ सहित) बटन की पूरी सामग्री छाया की जाएगी। क्या मैं एंड्रॉइड में एक ही प्रभाव प्राप्त कर सकता हूं, या क्या मुझे अलग-अलग राज्यों के लिए अलग-अलग छवियों का उपयोग करना है? इसके अलावा, अगर मैं अलग-अलग राज्यों के लिए अलग-अलग छवियों का उपयोग करता हूं, तो भी मैं पाठ को छाया कैसे बना सकता हूं? एक गंदा रास्ता बटन के लिए कोई OnClickListener
स्थापित करने के लिए और प्रोग्राम के जब दबाया टेक्स्ट की छाया है, लेकिन वहाँ किसी भी अन्य तरीके हैं है?दबाए जाने पर बटन पृष्ठभूमि और टेक्स्ट उपस्थिति को स्वचालित रूप से बदलें (आईओएस की तरह)?
उत्तर
मैं अब थोड़ी देर के लिए इस के लिए एक समाधान खोजने के लेकिन कुछ भी couldn't तो मैं एक बहुत साफ समाधान जो सभी छवि बटन पर काम करता है के साथ आया था की कोशिश कर रहा। आईओएस की तरह।
ब्लैक, 10% पारदर्शी छवि बनाएं और इसे पीएनजी के रूप में सहेजें। मैं इसे बटन_प्रेसed.png कहते हैं। आप इस छवि का उपयोग कर सकते हैं, http://img84.imageshack.us/img84/7924/buttonpressed.png
एक drawable प्रासंगिक कुछ कहा बनाएं, मैं इसे "button_pressed_layout.xml" कॉल
<?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/button_pressed" /> </selector>
अब LinearLayout अंदर बटन LinearLayout में अपनी बटन छवि रखा और फिर । बटन में बटन के रूप में button_pressed_layout.xml का उपयोग करें।
<LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="@drawable/button_image"> <Button android:id="@+id/myButtonId" android:text="@string/Continue" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@drawable/button_pressed_layout" android:textColor="#FFF" android:textSize="16dp" > </Button> </LinearLayout>
यही यह!
एक 2 बटन छवि बनाने के बिना एक दबाया राज्य पाने के लिए, मैं बटन के अल्फा बदलने के लिए एक OnTouchListener बनाया। यह सबसे सुंदर दबाया राज्य नहीं है, लेकिन एक प्रभावी स्वचालित व्यवहार देता है।
public class PressedStateOnTouchListener implements OnTouchListener
{
PressedStateOnTouchListener(float alphaNormal)
{
mAlphaNormal = alphaNormal;
}
public boolean onTouch(View theView, MotionEvent motionEvent)
{
switch(motionEvent.getAction()) {
case MotionEvent.ACTION_DOWN:
theView.setAlpha(mAlphaNormal/2.0f);
break;
case MotionEvent.ACTION_UP:
theView.setAlpha(mAlphaNormal);
break;
}
// return false because I still want this to bubble off into an onClick
return false;
}
private float mAlphaNormal;
}
अपनी गतिविधि में, प्रत्येक बटन को यह श्रोता लागू होते हैं:
Button theButton = (Button)findViewById(R.id.my_button_id);
theButton.setOnTouchListener(new PressedStateOnTouchListener(theButton.getAlpha()));
यह एक दबाए गए राज्य के "विपरीत" देता है। आपको दबाए जाने के लिए छवि को अंधेरा करना चाहिए, इसे हल्का नहीं करना चाहिए। और एक सफेद पृष्ठभूमि पर यह हल्का करता है। – dacopenhagen
यह एक टॉगल बटन, जहां राज्य ऊपर या नीचे हो सकता है, या एक नियमित रूप से बटन जहां यह केवल विभिन्न यह रूप में प्रकट होता है पर क्लिक किया जा रहा है? – TomHarrigan
यह एक नियमित बटन है। – hzxu