2013-04-22 5 views
1

У меня есть PreferenceActivity, где пользователь может выбрать размер для TextView приложения Widget. Действие вызывается при нажатии виджета. Я устанавливаю размер текста в OnPause, но он не работает. Что-то не так с кодом?Изменить размер шрифта приложения Виджет

public class WidgetSettings extends PreferenceActivity 
{ 
    private int mAppWidgetId = 0; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 

     addPreferencesFromResource(R.layout.widget_setttings_layout); 

     Intent intent = getIntent(); 
     Bundle extras = intent.getExtras(); 
     if (extras != null) { 

      mAppWidgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID, 
        AppWidgetManager.INVALID_APPWIDGET_ID); 
     } 
} 

    @Override 
    protected void onPause() 
    { 
     super.onPause(); 
     float textSize = Float.parseFloat(PreferenceManager.getDefaultSharedPreferences(this).getString("batteryTextSize", "12")); 

     AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(getBaseContext()); 

     RemoteViews remoteView = new RemoteViews(getBaseContext().getPackageName(), R.layout.widget_layout); 

     remoteView.setFloat(R.id.textView1, "setTextSize", 22); 

     appWidgetManager.updateAppWidget(mAppWidgetId, remoteView); 
    } 
} 
+0

Почему вы устанавливаете размер текста в onPause()? onPause() запускается, что удивительно, когда приложение приостанавливается, поэтому вашему пользователю придется подождать, пока устройство не выйдет из строя и не заснет, или вы не перенесете какую-либо другую деятельность на передний план. Попробуйте свой код в onResume(), который запускается сразу после onCreate() или когда действие возвращается на передний план. Если вы хотите получить настоящую фантазию, поместите корректировку размера текста в метод buildUI(), который можно назвать программным, как только пользователь изменит pref. Вы также можете использовать его в своих onResume() или onCreate(). – MarsAtomic

+0

Поскольку это настройка конфигурации, когда пользователь выбирает размер текста для виджета рабочего стола, а после того, как он выбирает размер и закрывает действие, виджет должен обновляться. – domen

+0

Я это понимаю, но я должен повторить: почему вы устанавливаете размер текста в onPause()? Вы пробовали переместить код в onResume()? Подумайте об этом ... пользователь запускает виджет -> пользователь нажимает prefs -> widget.onPause() -> запуск запусков prefs -> пользователь изменяет prefs -> пользователь возвращается в виджет -> widget.onResume() работает. Что мне не хватает? – MarsAtomic

ответ

0

У меня это в моем приложении.

// Update the widget 
Intent intent = new Intent(this, Widget.class); 
intent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE); 
int[] ids = { R.xml.widget }; 
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, ids); 
sendBroadcast(intent); 

Затем в приложении виджет поставщика OnUpdate (после настройки удаленных просмотров):

//appWidgetManager.updateAppWidget(appWidgetIds, views); 
AppWidgetManager.getInstance(context).updateAppWidget(new ComponentName(context, Widget.class), views); 

Первое это то, что документы говорят делать. Я нашел, что второй работал, как ожидалось.

Смежные вопросы