2012-05-19 20 views
21

के लिए ऑनक्लिक लागू करें मुझे बाईं ओर एक ड्रॉबल के साथ कुछ टेक्स्ट होना चाहिए और जब मैं छवि को क्लिक/स्पर्श करता हूं तो केवल कुछ कोड निष्पादित करना चाहता है (केवल छवि, पाठ नहीं), इसलिए मैं रैखिकलाइटटेक्स्ट व्यू और छवि दृश्य जो क्लिक करने योग्य है और ऑनक्लिक ईवेंट लॉन्च करता है। XML पार्सर मुझे पता चलता है जो एक्सएमएल की अब तक कम लाइनों के साथ एक ही बात ड्रा करेंगी एक यौगिक drawable, के साथ एक TextView के साथ इस को बदलने के लिए .. मेरा प्रश्न है "मुझे लगता है मैं एक onClick ईवेंट हैंडल करना चाहते हैं निर्दिष्ट कर सकते हैं केवल TextView की drawable पर और TextView ही? मैं कुछ समाधान जो TextView की अपनी विस्तार लेखन शामिल है देखा है पर नहीं है, लेकिन मैं केवल लेआउट के अंदर यह करने के लिए सक्षम किया जा रहा में दिलचस्पी रखता हूँ संसाधन, यदि संभव हो, अन्यथा मैं निम्नलिखित XML कोड रखूंगा:केवल टेक्स्ट व्यू कंपाउंड ड्रायबल

<LinearLayout 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:gravity="center" 
     android:orientation="horizontal" > 

     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:gravity="bottom" 
      android:paddingTop="10dp" 
      android:paddingLeft="10dp" 
      android:paddingRight="10dp" 
      android:text="@string/home_feedback_title" 
      android:textColor="@android:color/primary_text_dark" 
      android:textStyle="bold" 
      android:paddingBottom="4dp"/> 


     <ImageView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:src="@drawable/action_feedback" 
      android:clickable="true" 
      android:onClick="onClickFeedback" 
      android:contentDescription="@string/action_feedback_description"/> 
</LinearLayout> 

उत्तर

6

आप किसी भी तरह से जा सकते हैं। यौगिक ड्राइंग का उपयोग करना तेज है हालांकि यह अनुकूलन होना था। यह कम रैम का उपयोग करता है क्योंकि आप 3 में 3 विचारों को कम करते हैं और यह तेज़ लेआउट है क्योंकि आप 1 गहराई खो देते हैं।

यदि मैं आप थे तो मैं यह देखने के लिए वापस कदम उठाने पर विचार करता हूं कि क्या पाठ और छवि दोनों जो कुछ भी करने के लिए स्पर्श को रोकती है, वह संभवतः एक अच्छी बात है। आम तौर पर एक बड़ा स्पर्श क्षेत्र प्रेस करना आसान बनाता है। कुछ उपयोगकर्ता वास्तव में छवि के बजाय पाठ को छूने के इच्छुक हो सकते हैं।

आखिरकार यदि आप 2 विलय करने के उस मार्ग पर जाते हैं तो आप TextView के बजाय Button का उपयोग करने पर विचार करना चाहेंगे। आप बटन को स्टाइल कर सकते हैं ताकि इसके चारों ओर आयताकार न हो। वे इसे एक सीमा रहित बटन कहते हैं। यह अच्छा है क्योंकि आपको दृश्य प्रतिक्रिया प्राप्त होती है जिसे आपने एक क्रियाशील आइटम पर क्लिक किया है जहां ImageView या TextView सामान्य रूप से क्रियाशील नहीं हैं।

How to Create Borderless Buttons in Android

30

बहुत सरल इसकी। आइए कहें कि आपके टेक्स्ट व्यू 'txtview' के बाईं ओर एक ड्रॉबल है। चाल चलने के बाद।

TextView txtview = (TextView) findViewById(R.id.txtview); 
txtview.setOnTouchListener(new OnTouchListener() { 
    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
     if(event.getAction() == MotionEvent.ACTION_UP) { 
      if(event.getRawX() <= txtview.getTotalPaddingLeft()) { 
       // your action for drawable click event 

      return true; 
      } 
     } 
     return true; 
    } 
}); 

आप अगर बयान करने के लिए सही drawable बदलाव के लिए करना चाहते हैं: इसी प्रकार

if(event.getRawX() >= txtview.getRight() - txtview.getTotalPaddingRight()) 

, आप सभी यौगिक ड्रॉएबल के लिए यह कर सकते हैं।

txtview.getTotalPaddingTop(); 
txtview.getTotalPaddingBottom(); 

यह विधि कॉल उस तरफ सभी पैडिंग देता है जिसमें किसी भी ड्रॉबल्स शामिल हैं। आप टेक्स्टव्यू, बटन इत्यादि के लिए भी इसका उपयोग कर सकते हैं

एंड्रॉइड डेवलपर साइट के संदर्भ के लिए here पर क्लिक करें।

+0

ऐसा लगता है कि यह मूल लेआउट का उपयोग करने के लिए सुरक्षित है ... – deathangel908

2

@ विष्णुनाथसन का जवाब लगभग सही है, लेकिन getRaw() स्पर्श बिंदु की एक पूर्ण x स्थिति देता है। यदि टेक्स्टव्यू दृश्य के बाएं किनारे पर स्थित नहीं है, तो आपको getLocationOnScreen का उपयोग करके टेक्स्टव्यू की पूर्ण स्थिति से तुलना करनी चाहिए। नीचे दिया गया कोड बाएं ड्रॉ करने योग्य टैप और दाएं खींचने योग्य टैप दोनों को जांचने का एक उदाहरण है।

textView.setOnTouchListener(new OnTouchListener() { 
    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
     if(event.getAction() == MotionEvent.ACTION_UP) { 
      int[] textLocation = new int[2]; 
      textView.getLocationOnScreen(textLocation); 

      if(event.getRawX() <= textLocation[0] + textView.getTotalPaddingLeft()) { 

       //Left drawable was tapped. 

       return true; 
      }` 


      if(event.getRawX() >= textLocation[0] + textView.getWidth() - textView.getTotalPaddingRight()){ 

       //Right drawable was tapped. 

       return true; 
      } 
     } 
     return true; 
    } 
}); 
संबंधित मुद्दे