【问题标题】:Android widget not showing up on the list after developed开发后Android小部件未显示在列表中
【发布时间】:2013-04-03 15:24:46
【问题描述】:

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

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

  • 已创建 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 类
  • &lt;application&gt; 部分中添加了小部件到清单(由于某种原因无法在此处粘贴清单片段,它只是没有显示,请参见代码here

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

【问题讨论】:

  • 如果它没有在 Android 9 中列出怎么办?

标签: android android-widget


【解决方案1】:

遇到类似的问题,这就是发生在我身上的事情。在添加 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" />

【讨论】:

  • 我正在使用 resizeMode="none",它仍然有助于添加 minResizeHeight 和 minResizeWidth。
【解决方案2】:

这种问题可能在 2 种情况下发生。两者都在上面得到了回答,这是一个完整的答案,我遇到了这两种情况并解决了它们。

场景1

如果应用在 manifest 中指定了 android:installLocation="preferExternal" 参数,则应用将安装在外部内存中,并且不会显示在小部件列表中。另外,如果你让手机安装了sd卡上的所有应用程序,也会发生这种情况。

解决方案

进入设置->应用程序->YourApp 然后“移至电话”。这会将应用程序移动到您的手机内存中,现在您可以在小部件列表中看到小部件

场景2

如果以上修复没有解决您的问题,那么您的设备可能是 android 4.X.X 版本。

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

解决方案2

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

【讨论】:

  • 补充一点,如果 minHeight 和/或 minWidth 太大,它不会出现在小部件列表中。改成更小的res后会出现
【解决方案3】:

问题是android:installLocation="preferExternal"

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

【讨论】:

  • 这个简单的代码帮了我很多忙,为我节省了很多时间。谢谢
  • 事实上,appwidgets 总是与 SD 安装不兼容。用户不会收到来自 Android 的任何警告,小部件只是不会出现在列表中
【解决方案4】:

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

就我而言,问题是想多了:我认为在 meta-data 标记中,我们需要为提供者定义一个唯一名称(例如:“com.example.myprovider”)以及链接到xml资源。

错误:

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

对:

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

【讨论】:

  • 我链接到 android:resource 中的小部件布局而不是小部件信息:-LOL
【解决方案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借了这个代码

查看完整教程的链接

【讨论】:

    【解决方案6】:

    经过数小时的搜索并未能解决,我决定打开一个可以工作的小部件示例项目,并逐项比较以查看问题所在,最后,我解决了在我的 res/ 中添加了以下几行xml/widget_info.xml:

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

    其中 XXX 是某个值。

    【讨论】:

    • 这也是我的罪魁祸首。
    【解决方案7】:

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

    错误:

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

    正确:

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

    【讨论】:

      【解决方案8】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-22
        • 1970-01-01
        • 1970-01-01
        • 2021-10-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多