首先,我首先要说我已经访问了这两个:
question 1 about this subject,question 2 about this subject 两个都让我失望了。 其次,我的应用程序基于单个地图片段,我不知道这是否是一个问题,但TextView是信息窗口的一部分,它显示在地图上。
我在xml中有以下TextView:
<TextView
android:id="@+id/tv_link"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="20dp"
android:linksClickable="true"
android:autoLink="web" />
我希望将其作为一个链接,我以编程方式提供文本,并且可以看到文本原样,但它不是可点击的,或者是超链接&#34; ed。 以下是我在活动中设置TextView的部分:
TextView tvLink = (TextView) v.findViewById(R.id.tv_link);
// make the link clickable
tvLink.setClickable(true);
tvLink.setMovementMethod(LinkMovementMethod.getInstance());
String text = (String) urls.get(arg0.getTitle());
// Setting the link url
tvLink.setText(Html.fromHtml(text));
我也试过让TextView具有android:onClick="openBrowser"
的属性并让这个类openBroweser:
public void openBrowser(View view){
//Get url from tag
String url = (String)view.getTag();
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.addCategory(Intent.CATEGORY_BROWSABLE);
//pass the url to intent data
intent.setData(Uri.parse(url));
startActivity(intent);
}
但它也没有用。我可能在尝试不同的方法时弄得一团糟,但我确实尝试将每次尝试分开。而且很困惑,需要一个外观。
编辑1: 补充说:
Click here for more info about this location
(在这里工作,所以我认为它应该是一个合法的链接)
我在评论中要求的整个XML文件
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical" >
<TextView
android:id="@+id/tv_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textStyle="bold"
android:layout_gravity="center_horizontal"
/>
<TextView
android:id="@+id/tv_info"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<TextView
android:id="@+id/tv_link"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="20dp" />
</LinearLayout>
<ImageView
android:id="@+id/iv_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:layout_gravity="center_horizontal"
android:layout_marginTop="20dp"
/>
答案 0 :(得分:1)
首先取出:
android:linksClickable="true"
android:autoLink="web"
像这样:
<TextView
android:id="@+id/tv_link"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="20dp"/>
这对我来说是一个硬编码的网址。我怀疑你格式化网址的方式不正确。
String text = (String) urls.get(arg0.getTitle());
如果您使用的是字符串数组,我不确定您从中获得了什么。
您链接的两个问题都使用此格式:
String text = "<a href='http://www.google.com'> Google </a>";
<a href="some site">Link text</a>
您需要格式化字符串资源,如下所示:
<string name="txtCredits"><a href="http://www.google.com">Google</a></string>
我无法看到你的自定义类openBrowser是如何为你提取正确格式的字符串。
我建议你记录一切。
String text = (String) urls.get(arg0.getTitle());
Log.i("url = ", text);
tvLink.setText(Html.fromHtml(text));
答案 1 :(得分:1)
您尝试执行的操作无效,因为Google Maps InfoWindow不是实时视图。
在Custom Info Windows的文档中,它声明:
绘制的信息窗口不是实时视图。视图已呈现 作为图像(使用View.draw(Canvas))在返回时。这个 表示对视图的任何后续更改都不会反映出来 地图上的信息窗口。稍后更新信息窗口(for 例如,在图像加载后),调用showInfoWindow()。 此外,信息窗口不会考虑任何交互性 典型的普通视图,如触摸或手势事件。不管你 可以在整个信息窗口上收听通用点击事件 在下面的部分中描述。
和
因此,您在视图上设置的任何侦听器都会被忽略 无法区分视图各个部分的点击事件。
因此,不会处理整个InfoWindow布局中单个tv_link TextView的点击。
您需要使用OnInfoWindowClickListener来监听InfoWindow上的点击次数
答案 2 :(得分:0)
使用下面的任务完成所有任务
String str = holder.restContactInfoTV.getText()。toString();
int index = str.lastIndexOf(",");
SpannableString snstr = new SpannableString(str);
ClickableSpan Span = new ClickableSpan() {
@Override
public void onClick(View textView) {
try {
String mobile = CUrrentOrderChild
.getRestaurantMobileCO();
Intent intent = new Intent(Intent.ACTION_CALL,
Uri.parse("tel:" + mobile));
startActivity(intent);
} catch (Exception e) {
}
}
@Override
public void updateDrawState(TextPaint ds) {
// TODO Auto-generated method stub
super.updateDrawState(ds);
// ds.setColor(Color.RED);
//ds.setUnderlineText(true);
}
};
snstr.setSpan(Span, index + 2, snstr.length(),
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
holder.restContactInfoTV.setText(snstr);
holder.restContactInfoTV.setMovementMethod(LinkMovementMethod.getInstance());