Android小部件在开发后未显示在列表中

时间:2013-04-11 12:22:40

标签: android android-widget

我正在使用小部件升级我的应用。这不是我做过的第一个小部件。我总是遇到奇怪的问题,但最终小部件在列表中出现了。

这是我到目前为止所做的:

  • 创建了widget_layout.xml
  • 创建了widget_info.xml
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"  
    android:minWidth="110dp"
    android:minHeight="30dp"
    android:updatePeriodMillis="86400000"
    android:initialLayout="@layout/widget_layout"
    android:resizeMode="none">
</appwidget-provider>
  • 创建WidgetProvider类
  • <application>部分添加了要显示的小部件(出于某种原因,无法在此处粘贴清单片段,它只是没有显示,请参阅代码here

仍然无法在小部件列表中找到小部件。我在真实设备上调试应用程序。我正在使用库项目,但是小部件文件,但我在项目中直接运行。这可能会发生什么?

8 个答案:

答案 0 :(得分:28)

遇到类似的问题,这就是我发生的事情。在添加minResizeHeight之前,下面的Widget从未出现在Widget抽屉中。很奇怪,但可能是可调整大小的小部件所必需的。可能会更友好。

<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
android:initialLayout="@layout/pmt_schedule_scroll_widget"
android:minHeight="146dip"
android:minResizeHeight="73dp"
android:minWidth="146dip"
android:resizeMode="vertical"
android:updatePeriodMillis="0" />

答案 1 :(得分:23)

这种问题可能发生在两种情况下。两者都在上面得到了回答,这是一个完整的答案,我已经面对这两个场景并解决了这两个问题。

Scenario1

如果应用程序指定android:installLocation =&#34; preferExternal&#34;清单中的参数,App将安装在外部存储器中,它不会显示在窗口小部件列表中。此外,如果您已经让手机在SD卡上安装了所有应用程序,也会发生这种情况。

溶液

转到设置 - &gt;应用 - &gt; YourApp 然后&#34;转到手机&#34;。这会将应用程序移动到手机内存中,现在您可以在小部件列表中看到小部件

Scenario2

如果上述修复程序无法解决您的问题,那么您可能拥有一个安装了android 4.X.X版本的设备。

然后你必须在widget_info.xml文件中至少设置以下参数

溶液2

机器人:=了minHeight&#34; XXXdp&#34; 机器人:minWidth =&#34; XXXdp&#34;

答案 2 :(得分:9)

问题是android:installLocation="preferExternal"

如果应用程序安装在SD上,它会以某种方式导致小部件列表出现问题

答案 3 :(得分:7)

我尝试了所有可能的解决方案,没有任何对我有用...... 最后我解决了它。

就我而言,问题是过度思考:我认为在元数据标签中我们需要为提供者定义一个唯一的名称(例如:&#34; com.example.myprovider&#34; )以及链接到xml资源。

错:

Install

右:

<meta-data
      android:name="com.example.myprovider"
      android:resource="@xml/widget_info" />

答案 4 :(得分:5)

您需要在清单文件中注册BroadcastReceiver。例如:

<receiver
   android:icon="@drawable/icon"
   android:label="Example Widget"
   android:name="MyWidgetProvider" >
   <intent-filter >
        <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
   </intent-filter>

   <meta-data
      android:name="android.appwidget.provider"
      android:resource="@xml/widget_info" />
</receiver> 

我从http://www.vogella.com/articles/AndroidWidgets/article.html

借用了这段代码

请参阅完整教程的链接

答案 5 :(得分:1)

经过几个小时的搜索并且未能解决之后,我决定打开一个小工具的示例项目,该项目工作并逐项比较以查看错误,最后,我解决了我的res /上添加了以下几行/ XML / widget_info.xml:

android:minHeight="XXXdp"
android:minResizeHeight="XXXdp"
android:minResizeWidth="XXXdp"
android:minWidth="XXXdp"

其中XXX是值。

答案 6 :(得分:1)

就我而言,问题出在接收器的意图过滤器中。

错误:

<intent-filter>
    <action android:name="APPWIDGET_UPDATE" />
</intent-filter>

正确:

<intent-filter>
    <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>

答案 7 :(得分:0)

在我的情况下,它是minWidth,它太大了,只是放了一个较小的dp,它的minHeight也太高了!