TextView performClick()不单击链接

时间:2018-04-05 11:24:03

标签: android textview

我有TextView android:autoLink="all"

<TextView
    android:id="@+id/text"
    android:text="abcdefgh@def.com"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:autoLink="all" />

出于某种原因,我想在android:text中打开一个链接集(可能是电话号码,电子邮件等)。当我运行应用程序时,performClick()无法打开该链接。

TextView textView = findViewById(R.id.text);
textView.setMovementMethod(LinkMovementMethod.getInstance());
textView.performClick();

Linkify.addLinks(buffer, Linkify.ALL);和其他一些人没有帮助。

更新

感谢您的回复。收到3个答案后显示我的代码。我使用API​​ 19,25仿真器和设备(API 21)。可悲的是,没有任何作用。

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/text"
        android:text="abcdefgh@def.com"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:clickable="true"
        android:focusable="true"
        android:autoLink="web|email|phone" />

</android.support.constraint.ConstraintLayout>

MainActivity:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        TextView text = findViewById(R.id.text);
        int mask = Linkify.ALL;
        Linkify.addLinks(text, mask);
        text.setMovementMethod(LinkMovementMethod.getInstance());
        text.performClick();
    }
}

4 个答案:

答案 0 :(得分:1)

使用autoLink="web"

<TextView
    android:id="@+id/text"
    android:text="abcdefgh@def.com"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:autoLink="web" />

要以编程方式执行此操作,请在代码中使用view.setMovementMethod(LinkMovementMethod.getInstance());,并确保在XML布局中包含android:autoLink="web"

示例:

TextView text = (TextView) findViewById(R.id.text);
    text.setMovementMethod(LinkMovementMethod.getInstance());

修改

也使用android:linksClickable="true"。它可能会奏效。另外,请务必使用autoLinksetMovementMethod。不要同时使用它们。

编辑2

我意识到你想在textView上使用performClick()。虽然android.widget.TextView.performClick()的例子不多,但这意味着该方法不受欢迎或过时。但是它可以像这样实现:

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

public void onClick(View arg0) {
      Intent i=new Intent(Intent.ACTION_VIEW, Uri.parse("https://google.com"));
        startActivity(i);
    }
}

这符合您的要求。检查它是否有效。

答案 1 :(得分:1)

我们需要覆盖performClick():

@Override
 public boolean performClick() {
  // Calls the super implementation, which generates an AccessibilityEvent
        // and calls the onClick() listener on the view, if any
        super.performClick();

        // Handle the action for the custom click here

        return true;
 }

答案 2 :(得分:1)

不幸的是,你想要实现的目标是不可能的。基于textView.performClick()的文档:

  

调用此视图的OnClickListener(如果已定义

由于您尚未定义任何onClickListener,因此这些方法无法正常工作。

解决方法是定义自定义onClickListener并尝试以编程方式解析URI以触发相应的Intent.ACTION_VIEW

答案 3 :(得分:0)

只需在xml中使用此android:autoLink="web"即可。它对我有用。让我知道它是否有效