android – 重新安装后,Widget变得不可见

前端之家收集整理的这篇文章主要介绍了android – 重新安装后,Widget变得不可见前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个配置活动的小部件.当用户想要将窗口小部件放置在主屏幕上时,会打开configure活动,用户选择窗口小部件的内容,背景颜色和文本颜色,并且有它.当我重新安装应用程序时,该小部件变得不可见.它仍然在那里,但没有文字和颜色.见img:

我要发布我的所有文件,最后,我会告诉你可能是什么问题.我不知道的是解决方案.

widgetconfigure.xml

这是配置acitivty的布局.我不会发布这个xml.它在布局中有文字浏览.

widget_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="72dip"
    android:layout_height="72dip"
    android:layout_gravity="center"
    android:id="@+id/widgetlayout">

    <ImageView android:id="@+id/ImageView01"
     android:layout_width="72dip" 
     android:layout_height="72dip"
     android:scaleType="fitXY">
    </ImageView>

    <TextView
        android:id="@+id/tvConfigInput"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:gravity="left"
        android:textColor="#FFFFFF"
        android:layout_marginLeft="3dip"
        android:layout_marginRight="3dip"   
        android:textSize="12dip" />

</RelativeLayout>

注册我的配置活动和appwidgetprovider的清单的一部分:

<activity
            android:name=".WidgetConfig"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.appwidget.action.APPWIDGET_CONFIGURE" />
            </intent-filter>
        </activity>

        <receiver android:name=".MyWidgetProvider" android:label="@string/app_name">

            <intent-filter>
                <action android:name="android.appwidget.action.APPWIDGET_UPDATE"></action>
            </intent-filter>
            <Meta-data android:name="android.appwidget.provider" android:resource="@xml/widget_info"></Meta-data>
        </receiver>

XML / widget_info.xml

<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:initialLayout="@layout/widget_layout"
    android:minHeight="72dp"
    android:minWidth="72dp"
    android:configure="com.b2creative.notepad.WidgetConfig"> 
</appwidget-provider>

WidgetConfig.java

这是配置活动.用户选择窗口小部件的背景和文本颜色,列表视图中的文本显示在窗口小部件上.我将只发布相关部分:

AppWidgetManager awm;
        int awID;
        Intent i = getIntent();
        Bundle extras = i.getExtras();
        if (extras != null)
        {
            awID = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID,AppWidgetManager.INVALID_APPWIDGET_ID);
        }
        else
        {
            finish();
        }
        awm = AppWidgetManager.getInstance(c);


//the code from here is in a button onclicklistener that sets the widget.

            RemoteViews views = new RemoteViews(c.getPackageName(),R.layout.widget_layout);
            views.setTextViewText(R.id.tvConfigInput,widgettext);
            views.setTextColor(R.id.tvConfigInput,loadedtextcolor);
            views.setFloat(R.id.tvConfigInput,"setTextSize",int_widgetfontsize);

            Paint p = new Paint(); 
            p.setAntiAlias(true);
            p.setStyle(Style.FILL);
            p.setColor(loadedbgcolor);
            Bitmap bitmap = Bitmap.createBitmap(GetDipsFromPixel(72),GetDipsFromPixel(72),Config.ARGB_8888);
            Canvas canvas = new Canvas(bitmap);
            RectF rect = new RectF(0,GetDipsFromPixel(72));
            canvas.drawRoundRect(rect,10,p);
            views.setImageViewBitmap(R.id.ImageView01,bitmap);
            Intent in = new Intent(c,Notepad.class);
            PendingIntent pi = PendingIntent.getActivity(c,in,0);

            Intent result = new Intent();
            result.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,awID);
            setResult(RESULT_OK,result);

            awm.updateAppWidget(awID,views);

            finish();

MyWidgetProvider.java

public class MyWidgetProvider extends AppWidgetProvider {

        @Override
    public void onUpdate(Context context,AppWidgetManager appWidgetManager,int[] appWidgetIds) {

        super.onUpdate(context,appWidgetManager,appWidgetIds);
        final int N = appWidgetIds.length;
        for (int i=0; i<N; i++)
        {
            int awID = appWidgetIds[i];
            RemoteViews v = new RemoteViews(context.getPackageName(),R.layout.widget_layout);
            //v.setTextViewText(R.id.tvConfigInput,"Something");
            appWidgetManager.updateAppWidget(awID,v);
        }
    }

    @Override
    public void onDeleted(Context context,int[] appWidgetIds) {
        super.onDeleted(context,appWidgetIds);
    }

}

所以我很确定问题出在onUpdate方法,因为我没有设置窗口小部件的布局.我留下了一行//显示如果我添加它,我得到一个没有背景的小部件,但文本“Something”.

在这个方法中,我应该如何设置背景颜色,小部件的textcolor和widget的TextView文本?我不认识它们,用户添加窗口小部件时设置它们.或者我应该做什么?

编辑

我已经找到了this代码,并修改了我的这样:

我补充说
saveTitlePref(this,AppWidgetManager.INVALID_APPWIDGET_ID,widgettext);到WidgetConfig.java中的onClick方法,所以当用户在配置acitivty中按OK时,将使用appwidgetid保存widgettext(Idk what appwidgetid,因为代码使用AppWidgetManager.INVALID_APPWIDGET_ID).

为了这个工作,我需要这个:

static void saveTitlePref(Context context,int appWidgetId,String text) {
            SharedPreferences.Editor prefs = context.getSharedPreferences(PREFS_NAME,0).edit();
            prefs.putString(PREF_PREFIX_KEY + appWidgetId,text);
            prefs.commit();
        }

在MyWidgetProvider类中,我修改了for循环,如下所示:

final int N = appWidgetIds.length;
    for (int i=0; i<N; i++)
    {
        int awID = appWidgetIds[i];
        RemoteViews v = new RemoteViews(context.getPackageName(),R.layout.widget_layout);
        //v.setTextViewText(R.id.tvConfigInput,"Something");
        v.setTextViewText(R.id.tvConfigInput,loadTitlePref(context,AppWidgetManager.INVALID_APPWIDGET_ID));
        appWidgetManager.updateAppWidget(awID,v);
    }

我在哪里添加

static String loadTitlePref(Context context,int appWidgetId) {
            SharedPreferences prefs = context.getSharedPreferences(PREFS_NAME,0);
            String prefix = prefs.getString(PREF_PREFIX_KEY + appWidgetId,null);
            String nothing = "empty";
            if (prefix != null) {
                return prefix;
            } else {
                return nothing;
            }
        }

它仍然不起作用,但越来越近了.我在主屏幕上放置了两个带有不同文本的小部件,然后重新安装该应用程序.现在这两个小部件都有文本(当然,因为我设置了它),但是它们具有相同的文本,我为第二个小部件选择的文本.

请帮帮我.

解决方法

如果图像存储到SD卡,此帖子可能有答案: http://www.technipages.com/android-icons-disappear-from-home-screen.html

猜你在找的Android相关文章