TextView टेक्स्ट पर क्लिक या टैप कैसे करें


199

मुझे पता है कि यह बहुत आसान है (दोह ...) लेकिन मैं एंड्रॉइड ऐप में टेक्स्ट के टेक्स्ट व्यू लाइन को टैप करने या क्लिक करने पर एक विधि चलाने के लिए एक तरीका ढूंढ रहा हूं।

मैं बटन श्रोताओं और अनाम विधि श्रोता कॉल के बारे में सोचता रहता हूं, लेकिन यह सिर्फ TextView पर लागू नहीं होता है।

क्या कोई मुझे किसी कोड स्निपेट में यह दिखाने के लिए कह सकता है कि टेक्स्टव्यू में टेक्स्ट के एक टुकड़े पर क्लिक करना या टैप करना एक तरीका है?


64
आपको वास्तव में शीर्ष-सबसे उत्तर को स्वीकार करना चाहिए।
मारेक सेबा

8
उसे ऐसा करने के लिए लॉग इन करना होगा।
कार्ल एंडरसन

15
और उसने एक अच्छा उपयोगकर्ता नाम भी निकाल लिया है: /
MeetM

भविष्य के लिए, अगर कोई कोटलिन का उपयोग कर रहा है और कॉलबैक के साथ क्लिक करने योग्य पाठ पर पूर्ण नियंत्रण रखना चाहता है - मैंने इसके बारे में एक एक्सटेंशन फ़ंक्शन के लिए एक लेख लिखा है TextView- link.medium.com/TLq6sSTtc3
Hossain Khan

जवाबों:


456

इन विशेषताओं के साथ आप क्लिक हैंडलर को xml में सेट कर सकते हैं:

android:onClick="onClick"
android:clickable="true"

क्लिक करने योग्य विशेषता को न भूलें, इसके बिना, क्लिक हैंडलर को नहीं बुलाया जाता है।

main.xml

    ...

    <TextView 
       android:id="@+id/click"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"               
       android:text="Click Me"
       android:textSize="55sp"
       android:onClick="onClick"                
       android:clickable="true"/>
    ...

MyActivity.java

       public class MyActivity extends Activity {

          public void onClick(View v) {
            ...
          }  
       }

60
"क्लिक करने योग्य विशेषता मत भूलना, इसके बिना, क्लिक हैंडलर को नहीं बुलाया जाता है।" इस लाइन ने y दिन बचाया। बहुत बहुत धन्यवाद दोस्त।
एन-जोय

2
developer.android.com/reference/android/view/… पर क्लिक करने योग्य के बारे में कुछ उल्लेख करना होगा। एक घंटा बचा सकता था।
टेलर

4
मजेदार रूप से पर्याप्त है, विशेषता का उपयोग करके setOnClickListenerसेट करता clickableहै, लेकिन onClickविशेषता का उपयोग करना स्पष्ट रूप से नहीं है।
njzk2

5
ऐसा लगता है कि एंड्रॉइड 5.0 लॉलीपॉप (एपीआई 21) में विशेषता सेट onClick करता हैclickable । शायद वे इसे एक बग मानते थे कि पुराने संस्करणों में ऐसा नहीं होता था?
मार्क डोलिनर

क्या XML के माध्यम से लंबे समय तक क्लिक करने का कोई तरीका है?
एमीथ

52

यह काफी नहीं है कि आप क्या देख रहे हैं लेकिन यह वही है जो मैं कर रहा हूं। यह सब मेरे बाद है onCreate:

boilingpointK = (TextView) findViewById(R.id.boilingpointK);

boilingpointK.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        if ("Boiling Point K".equals(boilingpointK.getText().toString()))
            boilingpointK.setText("2792");
        else if ("2792".equals(boilingpointK.getText().toString()))
            boilingpointK.setText("Boiling Point K");
    }
});

28

ठीक है मैंने अपने प्रश्न का उत्तर दिया है (लेकिन क्या यह सबसे अच्छा तरीका है?)

जब आप किसी पाठ में किसी पाठ पर क्लिक करते हैं या टैप करते हैं तो यह विधि कैसे चलाई जाती है:

package com.textviewy;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.TextView;

public class TextyView extends Activity implements OnClickListener {

TextView t ;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    t = (TextView)findViewById(R.id.TextView01);
    t.setOnClickListener(this);
}

public void onClick(View arg0) {
    t.setText("My text on click");  
    }
}

और मेरा main.xml है:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:orientation="vertical"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent"
 >
<LinearLayout android:id="@+id/LinearLayout01" android:layout_width="wrap_content"             android:layout_height="wrap_content"></LinearLayout>
<ListView android:id="@+id/ListView01" android:layout_width="wrap_content"   android:layout_height="wrap_content"></ListView>
<LinearLayout android:id="@+id/LinearLayout02" android:layout_width="wrap_content"   android:layout_height="wrap_content"></LinearLayout>

<TextView android:text="This is my first text"
 android:id="@+id/TextView01" 
 android:layout_width="wrap_content" 
 android:textStyle="bold"
 android:textSize="28dip"
 android:editable = "true"
 android:clickable="true"
 android:layout_height="wrap_content">
 </TextView>
 </LinearLayout>

13

एक गतिविधि के अंदर जो एक लेआउट और एक टेक्स्टव्यू कहती है, यह क्लिक श्रोता काम करता है:

setContentView(R.layout.your_layout);
TextView tvGmail = (TextView) findViewById(R.id.tvGmail);
String TAG = "yourLogCatTag";
tvGmail.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View viewIn) {
                try {
                    Log.d(TAG,"GMAIL account selected");
                } catch (Exception except) {
                    Log.e(TAG,"Ooops GMAIL account selection problem "+except.getMessage());
                }
            }
        });

पाठ दृश्य इस तरह घोषित किया गया है (डिफ़ॉल्ट विज़ार्ड):

        <TextView
            android:id="@+id/tvGmail"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="@string/menu_id_google"
            android:textSize="30sp" />

और strings.xml फ़ाइल में

<string name="menu_id_google">Google ID (Gmail)</string>

11

हालाँकि आप श्रोता को टेक्स्टव्यू पर सेट करके समस्या का समाधान कर सकते हैं, यह अनुशंसित है कि नहीं। आपको फ्लैट बटन का उपयोग करना चाहिए क्योंकि यह बटन का एक उपवर्ग है और यह कई विशेषताओं को प्रदान करता है जो TextView नहीं करता है।


फ्लैट बटन का उपयोग करने के लिए, style="?android:attr/borderlessButtonStyle"विशेषता जोड़ें -

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="DONE"
    style="?android:attr/borderlessButtonStyle"/>

7

पाठ दृश्य में

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="New Text"
    android:onClick="onClick"
    android:clickable="true"

आपको View.OnClickListener को भी लागू करना होगा और ऑन क्लिक विधि में इरादे का उपयोग कर सकते हैं

    Intent intent = new Intent(android.content.Intent.ACTION_VIEW);
           intent.setData(Uri.parse("https://youraddress.com"));    
            startActivity(intent);

मैंने परीक्षण किया कि यह समाधान ठीक काम करता है।


3

पाठ के एक टुकड़े पर क्लिक करने के लिए (संपूर्ण नहीं TextView), आप उपयोग कर सकते हैं Htmlया Linkify(दोनों लिंक बनाते हैं जो कि खुले यूआरएल हैं, हालांकि, ऐप में कॉलबैक नहीं)।

Linkify

जैसे स्ट्रिंग संसाधन का उपयोग करें:

<string name="links">Here is a link: http://www.stackoverflow.com</string>

फिर एक टेक्स्टव्यू में:

TextView textView = ...
textView.setText(R.string.links);
Linkify.addLinks(textView, Linkify.ALL);

Html

का उपयोग कर Html.fromHtml:

<string name="html">Here you can put html &lt;a href="http://www.stackoverflow.com"&gt;Link!&lt;/&gt;</string>

फिर अपने टेक्स्टव्यू में:

textView.setText(Html.fromHtml(getString(R.string.html)));

0

आप TextView के लिए TextWatcher का उपयोग कर सकते हैं, ClickLinstener की तुलना में अधिक लचीला है (सबसे अच्छा या बुरा नहीं, केवल एक ही तरीका)।

holder.bt_foo_ex.addTextChangedListener(new TextWatcher() {

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            // code during!

        }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
            // code before!

        }

        @Override
        public void afterTextChanged(Editable s) {
            // code after!

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