2012-06-13 25 views
10

我有配置活動的小部件。當用戶想要將小部件放置在主屏幕上時,打開配置活動,用戶選擇小部件的內容,背景顏色和文本顏色並且存在它。當我重新安裝應用程序時,小部件變得不可見。它仍然存在,但沒有文字和顏色。見的img: enter image description here小部件變爲不可見後重新安裝

我要發表我的所有文件,並在結束時,我會告訴你可能是什麼問題。我不知道的是解決方案。

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, 0, GetDipsFromPixel(72), GetDipsFromPixel(72)); 
      canvas.drawRoundRect(rect, 10, 10, p); 
      views.setImageViewBitmap(R.id.ImageView01, bitmap); 
      Intent in = new Intent(c, Notepad.class); 
      PendingIntent pi = PendingIntent.getActivity(c, 0, 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」文本的小部件。

我怎麼設置背景顏色,控件的文本顏色和TextView的對小部件在該方法中的文本?我不知道他們,用戶在添加小部件時設置它們。或者我該怎麼做?

EDIT

我發現this代碼和改性礦這樣的:

我添加 saveTitlePref(this, AppWidgetManager.INVALID_APPWIDGET_ID, widgettext);在WidgetConfig.java OnClick方法,所以,當用戶按下在配置acitivty行,widgettext將與appwidgetid(Idk什麼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類我修改了這樣的循環:

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; 
      } 
     } 

它仍然不起作用,但越來越近。我在主屏幕上放置了兩個帶有不同文本的小部件,然後重新安裝應用程序。現在這兩個小部件都有文本(當然,因爲我設置了它),但它們具有相同的文本,我爲第二個小部件選擇了相同的文本。

請幫幫我。

+0

沒有人?我不知道這是一個很難的問題。我看到有許多不同用戶設置小部件的應用程序,那麼我該怎麼做? – erdomester

+0

我向任何告訴我如何處理用戶在配置活動中由用戶設置的小部件的人提供100積分的獎勵。 – erdomester

+0

我對此沒有任何想法,但只是一個想法,你是否嘗試過股票Android?我之前有過這樣的問題。這可能是一個具體的錯誤只是誤導你錯誤的方向 – kishu27

回答

-1

調整大小或移動窗口小部件,使一段時間後可見。爲了解決這個問題,我在我的imageview中放置了一個默認圖像,它對我很有幫助。