我有一个EditText关于我的Android,我希望任何嵌入式网址都是可点击的.我使用了这个Linkify类,它将它们变成蓝色并加下划线.但是,我无法弄清楚如何实际使它们可点击.
谢谢!
我有一个带有ListAdapter的直接ListView和用于列表的自定义onItemClick方法.我的ListView项目可以单击以执行其他功能.但是,我的一些ListView元素包含一个应该可以点击的电子邮件地址.
我找到了Linkify,并根据文档将其添加到电子邮件地址textview中.
执行此操作后,包含此类"可单击"文本视图的ListView项目现在不再可单击以执行其他功能.
我在创建整个视图后尝试添加OnItemClickListener,但无济于事:(
有什么想法如何让我的ListView项目可点击,尽管它们包含一个Linkified textView?
我最深切的抱歉是在开始提问之前不再进一步搜索.我找到了问题的答案,并将其作为答案发布.
到目前为止我所做的是具有普通文本和可点击跨度的文本视图的列表视图:

单击我打开URL的跨度,单击textView周围的项目查看导致listView OnItemClickListener导航到项目详细信息,这很好:

现在的问题是:
触摸textView使普通文本有点突出显示(完全选择项目时具有相同的颜色),textView的OnTouchListener触摸事件触发但不触发OnFocusChangeListener事件,并且项目的视图不会获得选择样式.尝试FOCUS_BLOCK_DESCENDANTS了listView的所有变体,项目视图,focusable启用或禁用textView 具有相同的结果.
幸运的是,textView OnClickListener事件以这种方式触发,但这太丑了:由于所选文本颜色与项目颜色相同,因此文本是不可见的,而触摸未被释放,没有其他迹象表明用户将转到其他项目详细信息比那丑陋的文字消失了.
我怀疑发生这种情况是因为SpannabletextView 的内容是,并且不是CliclableSpan-s的部分以这种奇怪的方式运行.
一旦接触到普通文本,我是否有机会选择该项目?
listView项目布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:descendantFocusability="blocksDescendants"
android:orientation="horizontal" >
<ImageView
android:id="@+id/icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginBottom="5dp"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:layout_marginTop="5dp"
android:focusable="false" />
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<TextView
android:id="@+id/title"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="5dp"
android:layout_marginTop="5dp"
android:focusable="false"
android:text=""
android:textAppearance="?android:attr/textAppearanceLarge"
android:textStyle="bold" />
<TextView
android:id="@+id/info"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="4dp"
android:layout_marginLeft="4dp"
android:layout_marginRight="4dp"
android:focusable="false"
android:text=""
android:textAppearance="?android:attr/textAppearanceSmall" />
<TextView
android:id="@+id/details"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="4dp"
android:layout_marginLeft="4dp"
android:layout_marginRight="4dp"
android:focusable="false" …Run Code Online (Sandbox Code Playgroud) 我试图转换,从textarea输入($_POST['content']),所有网址链接.
$content = preg_replace('!(\s|^)((https?://)+[a-z0-9_./?=&-]+)!i', ' <a href="$2" target="_blank">$2</a> ', nl2br($_POST['content'])." ");
$content = preg_replace('!(\s|^)((www\.)+[a-z0-9_./?=&-]+)!i', '<a target="_blank" href="http://$2" target="_blank">$2</a> ', $content." ");
Run Code Online (Sandbox Code Playgroud)
目标链接格式:www.hello.com或http(s)://(www).hello.com
但这似乎打破任何iframe,图像或类似,
正确的正则表达式如何忽略html标签中的url?
注意:我知道我需要两个表达式; 一个检测没有协议链接(比如www.hello.com,所以我需要预先添加)和另一个检测带协议的URL(所以不需要预先添加).
当你这样做时,例如,
Linkify.addLinks(mTextView, Linkify.EMAIL_ADDRESSES);
Run Code Online (Sandbox Code Playgroud)
Linkify使用什么颜色?它在android.graphics.Color中并不明显.
我有一些很长的段落,我只想要标准链接,还有一个我需要自己做的东西,我想看起来一样,但我无法弄清楚要设置它的颜色.我可以回忆所有其他人,但这似乎还有很长的路要走.
我有一个TextView通过调用它得到它的数据集:
tv.setText(Html.fromHtml(myText));
Run Code Online (Sandbox Code Playgroud)
该字符串myText包含部分格式化的html数据.例如,它可能有字体标记,但没有使用<a href=...>标记格式化的任何url链接.我希望使用Linkify.addLinks(...)这样做,因为我的文本可能包含Linkify将为我适当转换的其他类型的链接.所以我写了我的代码看起来像这样:
String myText = "<font color=\"red\">Red text</font> and Url: www.google.com";
tv.setText(Html.fromHtml(myText));
Linkify.addLinks(tv, Linkify.ALL);
tv.setMovementMethod(LinkMovementMethod.getInstance());
Run Code Online (Sandbox Code Playgroud)
这不能正常工作.这意味着它处理字体标记但Linkify不会UrlSpan正确转换网址.
或者,如果我在没有Html.fromHtml(..)的情况下调用setText(),Linkify可以工作,但是我会丢失所有从html字体标签格式化的文本.不知怎的,他们似乎都是冲突的,我只能有一个或另一个.
现在这是我不理解的有趣部分.如果我从java中删除Linkify代码并转到我的布局xml并在其中放置以下行,所有似乎都在工作(Linkify和fromHtml最终一起玩得很好......不知何故)
<TextView
...
android:autoLink="all"
android:linksClickable="true"
...
/>
Run Code Online (Sandbox Code Playgroud)
有人可以向我解释为什么会让一切正常吗?
我查看了TextView的源代码,setMovementMethod()最终调用:
setFocusable(true);
setClickable(true);
setLongClickable(true);
Run Code Online (Sandbox Code Playgroud)
理论上,这应该使一切工作和行为与xml布局代码相同.我尝试在java代码中切换Linkify.addLinks(..)之前调用的顺序setText(Html.fromHtml(..)),但这并没有什么区别.
关于为什么在java中组合Linkify.addLinks()和Html.fromHtml()的任何想法会导致这种行为......但不是在xml布局中?
<TextView
android:text="123456789"
android:autoLink="phone">
</TextView>
Run Code Online (Sandbox Code Playgroud)
我想从代码中创建这个TextView,但是我遇到了无数的问题.
首先,我中途创建一个TextView并添加:
tw_phone.setAutoLinkMask(0x04);
Run Code Online (Sandbox Code Playgroud)
这导致了一个可点击的TextView,但是当你点击时,一个toast说"没有应用程序可以执行此操作"或类似的东西.我也尝试过
Linkify.addLinks(tw_phone, Linkify.PHONE_NUMBERS); //and .ALL
Run Code Online (Sandbox Code Playgroud)
但它给了我相同的结果.
当我决定在StackOverflow上询问时,我试图剥离我的代码,因为我使用Layouts(你永远不知道)的方式有问题,但现在我甚至无法使TextView可点击.在我看来,这是代码应该工作的代码,因为它只是我在代码中使用的更精简的版本.
TableLayout table = (TableLayout) findViewById(R.id.tableResult);
TableRow row = new TableRow(this);
TextView tw = new TextView(this);
tw.setText("123456789");
tw.setAutoLinkMask(Linkify.ALL);
row.addView(tw);
table.addView(row);
Run Code Online (Sandbox Code Playgroud)
有人可以写一个简单的小例子来创建一个TextView,给它一个数字作为文本然后允许用户点击它并选择他们想要打开数字的任何应用程序吗?如果你能指出我的代码中的错误,那将是很好的,但我宁愿直接得到答案.我尝试的东西取自其他StackOverflow问题和答案.
我Linkify在我的应用程序中使用,访问过的链接文本显示为深紫色.我的整体布局背景颜色为深蓝色,因此无法阅读.文本设置为白色,但访问过的链接显示为深紫色.我该如何覆盖它?
<TextView android:text="Website:"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="14dip"
android:paddingBottom="2dip"
android:background="#ffffff"
android:textColor="#577dbe" />
<TextView android:text="http://www.mysite.com/"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="12dip"
android:paddingBottom="6dip"
android:textColor="#ffffff"
android:id="@+id/contactWeb1" />
Run Code Online (Sandbox Code Playgroud) 问题是,如果我链接textView,underLyng ScrollView不会听我设置的扫描手势.有没有办法让Linkify不会搞乱underliyng视图的手势?我试图覆盖ontouchEvent并将false返回给ACTION_MOVE,但是scrollview的手势需要ACTION_DOWN和ACTION_UP事件才能运行.有没有办法实现这一目标?
我有一个包含电子邮件的文本视图,我希望能够点击它们在我自己的应用程序中启动活动.我Linkify.addLinks(TextView, Linkify.EMAIL_ADDRESSES)用来使电子邮件可以点击,但这会弹出一个选择器,询问用户他们想要打开电子邮件的应用程序.如何直接处理此事件,以便我可以指定在点击链接时调用的活动?