更改 Widget 应用程序的文本大小

Posted

技术标签:

【中文标题】更改 Widget 应用程序的文本大小【英文标题】:Change text size of a Widget app 【发布时间】:2013-04-15 12:57:12 【问题描述】:

我有一个 PreferenceActivity,用户可以在其中选择 Widget 应用的 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);
    

【问题讨论】:

为什么要在 onPause() 中设置文本大小?令人惊讶的是,onPause() 会在应用程序暂停时运行,因此您的用户必须等到设备超时并进入睡眠状态,或者您将一些其他活动带入前台。在 onResume() 中尝试您的代码,该代码在 onCreate() 之后立即运行或当活动回到前台时运行。如果您想变得非常花哨,请将您的文本大小调整放入 buildUI() 方法中,一旦用户更改首选项,就可以通过编程方式调用该方法。您也可以在 onResume() 或 onCreate() 中使用它。 因为这是一个配置活动,用户选择主屏幕小部件的文本大小,在他选择大小并关闭活动后,小部件应该更新。 我明白,但我必须重申:为什么要在 onPause() 中设置文本大小?您是否尝试将代码移至 onResume()?想想看……用户启动小部件 -> 用户单击首选项 -> widget.onPause() -> 首选项活动启动 -> 用户更改首选项 -> 用户返回小部件 -> widget.onResume() 运行。我错过了什么? 这是 settings.onPause 不是 widget.onPause。无论如何,我的问题是如何强制小部件更新? 【参考方案1】:

你应该只使用以下方法。

remoteViews.setTextViewTextSize(R.id.textView, TypedValue.COMPLEX_UNIT_SP, 18);

我知道已经晚了。但是,我希望它可以帮助其他人。

【讨论】:

【参考方案2】:

我的应用中有这个。

// 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);

第一个是文档所说的。我发现第二个按预期工作。

【讨论】:

以上是关于更改 Widget 应用程序的文本大小的主要内容,如果未能解决你的问题,请参考以下文章

如何更改 RemoteViews 中的文本大小

如何更改导航视图项目的文本大小?

使用 RemoteView 自动调整 Widget 中的文本大小

由于 PC 显示设置的更改,Qt Widget 被部分裁剪

更改默认小部件大小

如何在 Shell TabbedPage 应用程序、Xamarin 表单中更改图标和文本大小