我第一次做一个简单的小部件,看起来我正在使用的教程有一些缺失,因为我的LogCat在弹出窗口小部件列表中选择它时会出现“Error inflating AppWidget”。
根据教程,我做了这些。
布局:
<TextView android:id="@+id/widget_textview" android:text="@string/widget_text"
android:layout_height="wrap_content" android:layout_width="wrap_content"
android:layout_gravity="center_horizontal|center"
android:layout_marginTop="5dip" android:padding="10dip"
android:textColor="@android:color/black" />
</LinearLayout>
类别:
package hello.widget;
import android.appwidget.AppWidgetProvider;
public class HelloWidget extends AppWidgetProvider {
}
的字符串:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Hello Widget</string>
<string name="widget_text">Hello Widget!</string>
</resources>
小工具提供商:
<?xml version="1.0" encoding="utf-8"?>
appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android">
android:minWidth="146dip"
android:minHeight="72dip"
android:updatePeriodMillis="10000"
android:initialLayout="@layout/main"
</appwidget-provider>
清单:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="hello.widget" android:versionCode="1" android:versionName="1.0">
<uses-sdk android:minSdkVersion="3" />
<application android:icon="@drawable/icon" android:label="@string/app_name">
<!-- Broadcast Receiver that will process AppWidget updates -->
<receiver android:name="hello.widget.HelloWidget" android:label="@string/app_name">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data android:name="android.appwidget.provider"
android:resource="@xml/hello_widget_provider" />
</receiver>
</application>
</manifest>
答案 0 :(得分:1)
您错过了布局文件中的空缺<LinearLayout>
。你在这里所拥有的甚至不应该编译。
您也错过了AppWidgetProvider
的整个实施。您需要实现onUpdate()
来指定应用小部件应显示的内容。
此外,您的updatePeriodMillis
比允许的时间短 - 您无法以这种方式每10秒更新一次应用小部件。
另外,请确保您的布局名为main.xml
,或更新android:initialLayout
以反映布局的正确名称。
答案 1 :(得分:1)
我的解决方案:
public void onReceive(Context context, Intent intent)
{
String action = intent.getAction();
if (AppWidgetManager.ACTION_APPWIDGET_UPDATE.equals(action))
{
long days = (((calendar.getTimeInMillis()- date1.getTime())/1000))/86400;
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget);
//Intent AlarmClockIntent = new Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_LAUNCHER).setComponent(new ComponentName("com.android.alarmclock", "com.android.alarmclock.AlarmClock"));
// PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, AlarmClockIntent, 0);
Intent Date_Change= new Intent(Intent.ACTION_DATE_CHANGED);
PendingIntent pendingIntent2=PendingIntent.getActivity(context,0, Date_Change, 0);
views.setOnClickPendingIntent(R.id.textView1, pendingIntent2);
views.setTextViewText(R.id.textView1,""+days);
//views.setOnClickPendingIntent(R.id.AnalogClock, pendingIntent);
//AppWidgetManager.getInstance(context).updateAppWidget(intent.getIntArrayExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS), views);
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
ComponentName thisWidget = new ComponentName(context, Widget.class);
appWidgetManager.updateAppWidget(thisWidget, views);
}
}