Android 小部件未显示在屏幕上
Android widgets not showing on screen
我想做一个简单的 widget
但是当我想把它放在屏幕上时它就消失了。
我在 Api 上试过这个:23,26 和 30,它们都给我相同的结果。
Manifest.xml
<receiver android:name=".mAppWidgetProvider">
<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>
widget_info.xml
<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
android:configure="com.app24.test.mAppWidgetProvider"
android:initialLayout="@layout/my_widget"
android:minWidth="250dp"
android:minHeight="70dp"
android:resizeMode="horizontal|vertical"
android:updatePeriodMillis="10000"
android:widgetCategory="home_screen">
</appwidget-provider>
mAppWidgetProvider
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.Context;
public class mAppWidgetProvider extends AppWidgetProvider {
}
my_widget(布局)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:background="@color/white"
android:padding="8dp">
<TextView
android:text="Hello world"
android:textSize="24sp"
android:layout_weight="1"
android:gravity="center"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<Button
android:text="Click me!"
android:layout_weight="1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<Button
android:text="Click me!"
android:layout_weight="1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
我已经尝试了其他解决方案,但没有任何效果。
查看 logcat 并寻找一些 Exception
。应用程序小部件在没有任何对话框的情况下“无声地”崩溃,只是没有出现。但是你应该能够在日志中找到问题的原因
在你的代码中我看到一行错误:
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
...
android:configure="com.app24.test.mAppWidgetProvider"
...
android:configure
should point on some Activity
,这将在您的小部件添加到主屏幕时启动。你的线错误地指向你的自定义 AppWidgetProvider
,这不是 Acticity
- 系统可能会尝试将此 class 启动为 Activity
或者可能会检查 instanceof
和因为这个 class 不是 Activity
然后发生崩溃。尝试删除此行开始(或指向正确的 class)
我想做一个简单的 widget
但是当我想把它放在屏幕上时它就消失了。
我在 Api 上试过这个:23,26 和 30,它们都给我相同的结果。
Manifest.xml
<receiver android:name=".mAppWidgetProvider">
<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>
widget_info.xml
<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
android:configure="com.app24.test.mAppWidgetProvider"
android:initialLayout="@layout/my_widget"
android:minWidth="250dp"
android:minHeight="70dp"
android:resizeMode="horizontal|vertical"
android:updatePeriodMillis="10000"
android:widgetCategory="home_screen">
</appwidget-provider>
mAppWidgetProvider
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.Context;
public class mAppWidgetProvider extends AppWidgetProvider {
}
my_widget(布局)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:background="@color/white"
android:padding="8dp">
<TextView
android:text="Hello world"
android:textSize="24sp"
android:layout_weight="1"
android:gravity="center"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<Button
android:text="Click me!"
android:layout_weight="1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<Button
android:text="Click me!"
android:layout_weight="1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
我已经尝试了其他解决方案,但没有任何效果。
查看 logcat 并寻找一些 Exception
。应用程序小部件在没有任何对话框的情况下“无声地”崩溃,只是没有出现。但是你应该能够在日志中找到问题的原因
在你的代码中我看到一行错误:
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
...
android:configure="com.app24.test.mAppWidgetProvider"
...
android:configure
should point on some Activity
,这将在您的小部件添加到主屏幕时启动。你的线错误地指向你的自定义 AppWidgetProvider
,这不是 Acticity
- 系统可能会尝试将此 class 启动为 Activity
或者可能会检查 instanceof
和因为这个 class 不是 Activity
然后发生崩溃。尝试删除此行开始(或指向正确的 class)