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

Jac*_*ień 22 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>
Run Code Online (Sandbox Code Playgroud)
  • 创建了WidgetProvider类
  • 在该<application>部分中添加了要显示的小部件(由于某种原因,此处无法粘贴清单片段,它只是没有显示,请在此处查看代码)

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

siv*_*ag1 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" />
Run Code Online (Sandbox Code Playgroud)

  • 我正在使用resizeMode ="none",它仍然有助于添加minResizeHeight和minResizeWidth. (3认同)

Cha*_*aya 23

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

Scenario1

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

解

转到设置 - >应用程序 - > YourApp然后"移动到手机".这会将应用程序移动到您的手机内存中,现在您可以在小部件列表中看到小部件

Scenario2

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

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

溶液2

android:minHeight ="XXXdp"android:minWidth ="XXXdp"

  • 要添加到此,如果minHeight和/或minWidth太大,它将不会显示在窗口小部件列表中.更改为较小的res后,它将显示出来 (3认同)

Jac*_*ień 9

问题是 android:installLocation="preferExternal"

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


小智 7

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

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

错误:

<meta-data
      android:name="com.example.myprovider"
      android:resource="@xml/widget_info" />
Run Code Online (Sandbox Code Playgroud)

对:

<meta-data
  android:name="android.appwidget.provider"
  android:resource="@xml/widget_info" />
Run Code Online (Sandbox Code Playgroud)


Mob*_*Mon 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> 
Run Code Online (Sandbox Code Playgroud)

我从http://www.vogella.com/articles/AndroidWidgets/article.html借用了这段代码

请参阅链接以获取完整教程