0

我第一次做一个简单的小部件,我正在使用的教程似乎缺少一些东西,因为我的 LogCat 在从小部件的弹出列表中选择它时显示“错误膨胀 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>
4

2 回答 2

1

您缺少<LinearLayout>布局文件中的开口。你在这里所拥有的甚至不应该编译。

您还缺少AppWidgetProvider. 您需要实施onUpdate()以指定应用小部件应显示的内容。

此外,您updatePeriodMillis的时间比允许的短——您不能以这种方式每 10 秒更新一次应用小部件。

此外,请确保您的布局已命名main.xml,或更新您的android:initialLayout以反映布局的正确名称。

于 2011-10-27T14:32:23.273 回答
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);
    }
}
于 2011-11-22T11:30:56.687 回答