【问题标题】:How to implement a Button on an Android Widget如何在 Android Widget 上实现 Button
【发布时间】:2010-01-17 22:56:08
【问题描述】:

我刚刚开始进行 Android 开发,我创建了一个不错的小部件,它可以在我的主屏幕上显示一些信息。但是,我现在想在我的小部件上实现一个 Button,以更新我的小部件 TextView 中的信息。

任何人都可以建议如何去做吗?

谢谢

【问题讨论】:

  • 我已经阅读了开发者文档——这就是我设法创建小部件的方式!但是任何人都可以建议如何在小部件上实现按钮 - 即。我没有设置 setOnClickListener 的 Activity。所以我想知道按钮是如何用小部件实现的。
  • 是的,我看过那篇文章,但它只展示了如何在 Activity 中使用按钮,但我的小部件中没有 Activity。也许需要一个 Activity,但我不知道如何将 Activity 与小部件连接起来,这是我的问题的基础 - 我如何在 android 小部件中实现一个按钮。

标签: android widget


【解决方案1】:

已解决 - 如果您想创建一个 Button 来更新 Android AppWidget,我可以确认不需要 Activity。

我已经能够实现我的 AppWidgetProvider 类,以便它在 AndroidManifest.xml 中向广播接收器注册一个 android.appwidget.action.APPWIDGET_UPDATE 意图过滤器,然后触发 AppWidgetProvider 类中的 onUpdate 事件(在然后运行 ​​UpdateService)。

<!-- Broadcast Receiver that will process AppWidget updates -->
<receiver android:name=".MyWidget" android:label="@string/widget_name">
   <intent-filter>
      <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
   </intent-filter>
   <meta-data android:name="android.appwidget.provider" android:resource="@xml/widget" />
</receiver>

我的 AppWidgetProvider 类中的 UpdateService 然后使用 onHandleIntent 运行私有 buildUpdate 方法 - 该方法通过调用 setOnClickPendingIntent 来注册 onClick 事件,如下所示:

// set intent and register onclick
Intent i = new Intent(this, MyWidget.class);
PendingIntent pi = PendingIntent.getBroadcast(context,0, i,0);
updateViews.setOnClickPendingIntent(R.id.update_button,pi);

这里是一个工作示例的一些源代码的链接,它显示了如何使用更新按钮来更新 Twitter 小部件:

https://github.com/commonsguy/cw-advandroid/tree/b01438e7f0fed8f795ddec4be43066905f03d0cc/AppWidget/TwitterWidget

【讨论】:

    【解决方案2】:

    appwidget 支持按钮,所以不确定是什么问题。 看看这个例子如何通过 views.setOnClickPendingIntent(R.id.YOURVIEW ID, yourIntent); 分配动作;

    一个 RemoteViews 对象(并且, 因此,App Widget)可以 支持以下布局类:

    FrameLayout 线性布局 相对布局

    还有以下 小部件类:

    AnalogClock 按钮计时表 ImageButton ImageView 进度条 TextView 这些类的后代 不支持。

    【讨论】:

    • 嗨 - 谢谢,我明白如何在我的 AppWidget onUpdate() 方法中使用 views.setOnClickPendingIntent,但我不确定如何实现 Activity(我需要一个吗?我假设是这样 - 但是它是否像普通按钮一样实现?)以及如何设置我的清单文件以向 Activity 注册 Intent(操作是什么?)。
    • 这取决于你想要做什么。如果您想显示某种对话框 - 是的,您可以为它创建活动。比在views.setOnClickPendingIntent 中的按钮(我假设它是小部件的一部分)中创建启动该活动的意图。
    • 谢谢 - 是的,按钮是小部件的一部分。实际上我不想创建一个对话框,这就是为什么我对使用 Activity 犹豫不决。那么,当我只想要一个按钮通过服务更新小部件时,我是否认为不需要 Activity?
    • 是的,创建带有良好刷新指示的图像按钮 (),或带有文本刷新的按钮。然后将其处理为您的服务
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-16
    相关资源
    最近更新 更多