【问题标题】:android - widget helpandroid - 小部件帮助
【发布时间】:2011-04-29 11:17:57
【问题描述】:

我最近尝试练习制作一个显示当前电池状态的电池小部件。

我已经输入了源代码:

java 文件:

package cam.widget.batterywiz;

import android.app.Service;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.os.IBinder;
import android.widget.RemoteViews;

public class batwiz extends AppWidgetProvider {
    /** Called when the activity is first created. */
    @Override
    public void onUpdate (Context c, AppWidgetManager awm, int[] id) {
        c.startService(new Intent (c, UpdateService.class));
    }

    public static class UpdateService extends Service {
        public void onStart (Intent intent, int startId) {
            RemoteViews rv = new RemoteViews (getPackageName(), R.layout.bat);
            rv.setTextViewText(R.id.battery, "80%");
            ComponentName thiswidget = new ComponentName (this, batwiz.class);
            AppWidgetManager m = AppWidgetManager.getInstance(this);
            m.updateAppWidget(thiswidget, rv);
        }


        @Override
        public IBinder onBind(Intent intent) {
            // TODO Auto-generated method stub
            return null;
        }

    }
}

bat2.xml 文件:

<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/widget"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    >

    <ImageView
        android:id="@+id/battery"
        android:src="@drawable/battery_icon"
        android:cropToPadding="true"
    >
    </ImageView>
</LinearLayout>

安卓清单:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="cam.widget.batterywiz"
      android:versionCode="1"
      android:versionName="1.0">
    <application android:icon="@drawable/icon" android:label="@string/app_name">

        <receiver android:name=".batwiz">
            <intent-filter>
                <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
            </intent-filter>
            <meta-data android:name="android.appwidget.provider"
                       android:resource="@layout/bat" />
        </receiver>

    </application>
    <uses-sdk android:minSdkVersion="4" />

</manifest> 

你们能试着找出我的错误吗??
因为在我的模拟器中它说“加载小部件时出现问题”
感谢您的帮助..

【问题讨论】:

  • 你的 logcat 里有什么?必须有异常或错误消息。
  • 实际上它在我的模拟器中运行流畅,但是当我尝试将它拖放到主屏幕时,它显示“加载小部件时出现问题”

标签: android widget


【解决方案1】:

问题出在你的清单文件中,上面写着@xml/bat

您的提供商信息应该在您的/res/xml 文件夹中。

另外,您需要将您的 RemoteViews 创建更改为 RemoteViews rv = new RemoteViews (getPackageName(), R.layout.bat2);,

ImageViews 没有SetText 方法。

编辑:

变化

RemoteViews rv = new RemoteViews (getPackageName(), R.layout.bat2);

android:resource="@xml/bat" />

(并将bat.xmllayout/ 移动到xml/

rv.setTextViewText(R.id.battery, "80%");

这不起作用,ImageView 不是 TextView 的子级,因此它没有 SetText 方法。

【讨论】:

  • 啊抱歉我忘了添加 bat.xml.... 实际上 bat.xml 的内容是 appwidget-provider.. 这是 bat.xml 文件:
  • schemas.android.com/apk/res/android" android:minWidth="84dip" android:minHeight=" 176dip" android:updatePeriodMillis="300000" android:initialLayout="@layout/bat2" />
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-09-17
  • 2014-08-16
  • 2021-09-15
  • 2011-10-08
  • 1970-01-01
  • 2011-12-21
  • 2017-02-14
相关资源
最近更新 更多