TextView 텍스트를 클릭하거나 탭하는 방법


199

나는 이것이 너무 쉽다는 것을 알고 있지만 안드로이드 앱에서 TextView 텍스트 줄을 누르거나 클릭하는 방법을 찾고 있습니다.

버튼 리스너와 익명 메소드 리스너 호출에 대해 계속 생각하고 있지만 TextView에는 적용되지 않는 것 같습니다.

누군가 TextView에서 텍스트를 클릭하거나 두드리는 방법이 어떻게 실행되는지 보여주는 코드 스 니펫을 알려줄 수 있습니까?


64
당신은 정말로 최고의 답변을 받아 들여야합니다.
Marek Sebera

8
그렇게하려면 로그인해야합니다.
Carl Anderson

15
그리고 그는 또한 멋진 사용자 이름을
빼앗 았습니다

누군가가 코 틀린를 사용하고 콜백 클릭 할 수있는 텍스트를 완벽하게 제어 할 수하고자하는 경우 미래를 위해, - 나는에 대한 확장 기능을 가지고 그것에 대해 기사를 쓴 TextView- link.medium.com/TLq6s8ltc3
의 Hossain 칸

답변:


456

다음 속성을 사용하여 xml에서 클릭 핸들러를 설정할 수 있습니다.

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

clickable 속성이 없으면 click 핸들러가 호출되지 않습니다.

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 일을 절약했습니다. 고마워 친구
N-JOY

2
developer.android.com/reference/android/view/… 클릭 가능에 대해 언급해야합니다. 한 시간을 절약 할 수있었습니다.
테일러

4
충분히 재미있게 사용하여 setOnClickListener설정합니다 clickable속성을하지만, 사용 onClick분명히 속성을하지 않습니다.
njzk2

5
것 같습니다 onClick 않습니다 설정된 clickable안드로이드 5.0 롤리팝 (API 21)의 속성을. 어쩌면 그들은 이것이 이전 버전에서는 발생하지 않은 버그라고 생각했을까요?
Mark Doliner 2013

XML을 통한 긴 클릭을 위해 이것을 수행하는 방법이 있습니까?
Amyth

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

OK 나는 내 자신의 질문에 대답했습니다 (그러나 최선의 방법입니까?)

다음은 TextView에서 일부 텍스트를 클릭하거나 탭할 때 메소드를 실행하는 방법입니다.

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로 설정하여 문제를 해결할 수 있지만 사용하지 않는 것이 좋습니다. 플랫 버튼 은 Button의 하위 클래스이므로 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에서

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

또한 View.OnClickListener를 구현해야하며 On Click 메서드에서 의도를 사용할 수 있습니다.

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

이 솔루션이 제대로 작동하는지 테스트했습니다.


3

전체 텍스트가 아닌 텍스트를 클릭하려면 또는를 TextView사용할 수 있습니다 ( Html또는 Linkify앱에서 콜백이 아닌 URL을 여는 링크 만들기).

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

TextViewer를 TextView에 사용할 수 있으며 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!

        }
    });
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.