我有一个显示文本字段的基本小部件。我试图找出当用户点击小部件本身时如何启动网站网址。我似乎无法找到任何有关此事的代码。
答案 0 :(得分:3)
我们无法直接在小部件中使用onClickListener
视图。相反,我们应该使用Intent
和PendingIntent
来setOnClickPendingIntent
来查看。
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
super.onUpdate(context, appWidgetManager, appWidgetIds);
// There maybe > 1 instance of our widget
for (int i : appWidgetIds) {
startBrowsing(context, appWidgetManager, i);
}
}
// Processing click on widget
private void startBrowsing(Context ctx,
AppWidgetManager appWidgetManager, int widgetID) {
RemoteViews widgetView = new RemoteViews(ctx.getPackageName(), R.layout.widget);
Uri uri = Uri.parse("http://www.google.com");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
PendingIntent pIntent = PendingIntent.getActivity(ctx, widgetID, intent, 0);
// viewID - our clickable view ID
widgetView.setOnClickPendingIntent(R.id.viewID, pIntent);
appWidgetManager.updateAppWidget(widgetID, widgetView);
}
在metadata.xml中将更新周期设置为0,因为我们手动更新
android:updatePeriodMillis="0"
不要忘记
<uses-permission android:name="android.permission.INTERNET"/>
答案 1 :(得分:3)
首先,设置一个动作标识符。
private final String WIDGET_CLICK = "WidgetClick";
然后,在初始化窗口小部件时,为窗口小部件的根视图注册PendingIntent。将“YourAppWidgetProvider”替换为覆盖AppWidgetProvider的窗口小部件类。
Intent intent = new Intent(context, YourAppWidgetProvider.class);
intent.setAction(WIDGET_CLICK);
views.setOnClickPendingIntent(R.id.widget_layout, PendingIntent.getBroadcast(context, 0, intent, 0));
最后,覆盖onReceive并使用它提供的上下文来启动您的网站。将“urlString”替换为您网站的地址,不要忘记在地址中包含http://。
@Override
public void onReceive(Context context, Intent intent) {
super.onReceive(context, intent);
if (intent.getAction() != null && intent.getAction().equals(WIDGET_CLICK)) {
try {
Intent webIntent = new Intent(Intent.ACTION_VIEW).setData(Uri.parse(urlString));
webIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(webIntent);
} catch (RuntimeException e) {
// The url is invalid, maybe missing http://
e.printStackTrace();
}
}
}
答案 2 :(得分:0)
基本上有两种选择:
我更喜欢第一种方法:
TextView tv=(TextView ) findViewById(R.id.myTextView);
tv.setText(Html.fromHtml("<a href='stackoverflow.com'>Go StackOverFlow!</a>"));
答案 3 :(得分:0)
我猜是因为你说“小部件”以前的答案不适合你。我在同一条船上 - 您可能需要通过RemoteViews API设置待处理的意图,就像这里所做的那样(http://stackoverflow.com/questions/2082998/how-to-implement-a-button- on-an-android-widget)除了你传入textview ID而不是按钮ID ...我想。
你不应该需要花哨的意图动作......只需将他们在PendingIntent调用中使用的Intent替换为@ CommonsWare对此问题的回答。
答案 4 :(得分:-1)
将TextView设置为可以使用TextView.setOnClickListener(this)
进行点击,然后让您的活动实现OnClickListener
界面并定义public void onClick(View v)
方法。
在onClick(View v)
方法中,执行以下操作:
public void onClick(View v){
startActivity(new Intent(Intent.ACTION_VIEW, url));
}
这将打开设备浏览器中的url
。
您还可以使用另一个使用WebView显示网站的活动。
我希望它有所帮助。