Android:如何在ListView中添加HTML链接?
如何在ListView中添加可点击链接?这是使用TextView的“自动链接”属性完成的。我花了一些时间翻阅了文档,因此将其放在这里并举例说明,以防其他人正在查找: 假设您正在将listview绑定到自定义适配器。在这种情况下,以下代码将进入getView调用: 代码:Android:如何在ListView中添加HTML链接?,html,android,listview,hyperlink,Html,Android,Listview,Hyperlink,如何在ListView中添加可点击链接?这是使用TextView的“自动链接”属性完成的。我花了一些时间翻阅了文档,因此将其放在这里并举例说明,以防其他人正在查找: 假设您正在将listview绑定到自定义适配器。在这种情况下,以下代码将进入getView调用: 代码: textcontent.setText(Html.fromHtml(item.get_text())); textcontent.setAutoLinkMask(Linkify.WEB_URLS); <TextView
textcontent.setText(Html.fromHtml(item.get_text()));
textcontent.setAutoLinkMask(Linkify.WEB_URLS);
<TextView
android:id="@+id/txtview"
android:autoLink="web"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:text="put your link here"/>
只要将链接放在传递给setText调用的文本中,就完成了
XML:
textcontent.setText(Html.fromHtml(item.get_text()));
textcontent.setAutoLinkMask(Linkify.WEB_URLS);
<TextView
android:id="@+id/txtview"
android:autoLink="web"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:text="put your link here"/>
希望这有助于 如果您的文本已经是HTML格式,最好执行以下操作:
TextView textcontent = (TextView) findViewById(...);
textcontent.setMovementMethod(LinkMovementMethod.getInstance());
String text = "<a href="http://www.stackoverflow.com">stackoverflow.com</a>";
textcontent.setText(Html.fromHtml(text));
TextView textcontent=(TextView)findViewById(…);
setMovementMethod(LinkMovementMethod.getInstance());
字符串文本=”;
textcontent.setText(Html.fromHtml(text));
这将导致在文本视图中可以单击任何链接标记。或者,您可以使用Legend建议的android:autoLink=“web”
,但这会产生以下副作用:a)链接未包装在锚标记中的URL,以及b)可能缺少URL或链接非URL的内容。如果您想要autoLink的智能,那么您应该使用它,但是如果您只想链接已有的标记,那么最好使用setMovementMethod()
有关更多详细信息,请参阅此错误报告:
嗯,似乎添加了textcontent.setMovementMethod(LinkMovementMethod.getInstance());使文本视图的文本部分上的单击不再传递到下面的列表视图 我在下面找到了一个简单的解决方法: 解决此问题的一个简单方法是调用 “setDescendantFocusability(焦点\块\子体);” 在添加listView视图时在其上显示。 您可以选择行,单击行,然后单击子复选框和按钮 虽然需要一些铸造,但对我来说效果非常好:
View v;
((ViewGroup)v).setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS);
您需要设置函数setOnItemClickListener(),并在其中声明如下内容:
Uri uri = Uri.parse( "http://www.google.com" );
startActivity( new Intent( Intent.ACTION_VIEW, uri ) );
listview的棘手之处在于,其中没有任何内容(例如按钮的文本视图)是可点击的 基本上,您需要两个字符串数组:
<string-array name="search_provider_name_array">
<item>Google</item>
<item>Yahoo</item>
<item>Bing</item>
<item>Baidu</item>
</string-array>
<string-array name="search_provider_link_array">
<item>https://www.google.com</item>
<item>https://www.yahoo.com</item>
<item>https://www.bing.com</item>
<item>https://www.baidu.com</item>
</string-array>
谷歌
雅虎
宾
百度
https://www.google.com
https://www.yahoo.com
https://www.bing.com
https://www.baidu.com
在layout_search_provider.xml中,它包含一个列表视图:
<ListView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/lv_search"
android:dividerHeight="1dp"/>
在您的活动中:
public class SearchProvider implements AdapterView.OnItemClickListener {
private ListView lv_search;
private String[] names = getResources().getStringArray(R.array.search_provider_name_array);
private String[] links = getResources().getStringArray(R.array.search_provider_link_array);
//..
@Override
public View onCreateView(View v, String name, Context context, AttributeSet attrs) {
lv_search= (ListView) v.findViewById(R.id.lv_search);
ArrayAdapter sAdapter = new ArrayAdapter(getActivity(), android.R.layout.simple_list_item_1, names);
lv_search.setAdapter(sAdapter);
lv_search.setOnItemClickListener(this);
return v;
}
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
if(i<links.length){
Uri uri = Uri.parse(links[i]);
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
}
}
}
公共类SearchProvider实现AdapterView.OnItemClickListener{
私有ListView lv_搜索;
私有字符串[]名称=getResources().getStringArray(R.array.search\u provider\u name\u array);
私有字符串[]links=getResources().getStringArray(R.array.search\u provider\u link\u array);
//..
@凌驾
创建视图的公共视图(视图v、字符串名称、上下文上下文、属性集属性){
lv_search=(ListView)v.findViewById(R.id.lv_search);
ArrayAdapter sAdapter=新的ArrayAdapter(getActivity(),android.R.layout.simple_list_item_1,name);
lv_搜索设置适配器(sAdapter);
lv_search.setonicmclicklistener(本);
返回v;
}
@凌驾
公共无效onItemClick(AdapterView AdapterView、View视图、int i、long l){
如果(这实际上对我不起作用-在ListView中的项目中,单个链接仍然不可链接,但是emmby的解决方案非常有效。非常感谢,我的ListView.Hmm帮助了我,似乎添加了textcontent.setMovementMethod(LinkMovementMethod.getInstance());使对textview文本部分的单击不再传递到下面的listview。这是对所问问题的最正确答案。BeerMe的答案修复了listview项目变得不可访问的问题。您在哪里添加DesendantFocusability?到listview还是到ListItem?我遵循了您的示例e添加可点击链接,但是当点击我的textview的非链接部分时,事件不会传递给listitem的父视图或listview…我这样使用它:public view getView(int position,view convertView,ViewGroup parent){view v=convertView;if(v==null){LayoutInflater vi=(LayoutInflater)context.getSystemService(context.LAYOUT\u INFLATER\u SERVICE);v=vi.inflate(itemLayout,null);}…((ViewGroup)v.SetDegenantFocusability(ViewGroup.FOCUS\u BLOCK\u Subgenders);return v;}如果单击非链接部分,我还没有检查事件会发生什么。(不确定为什么我无法将代码格式化…抱歉。)