android设置系统语言,字体大小,字体样式导致widget控件失效

在setting中设置系统的字体大小,样式,以及系统语言等等会对widget产生影响,造成widget控件失效。

由于在setting中设置系统的字体大小,样式,以及系统语言等等系统发出 android.appwidget.action.APPWIDGET_UPDATE的 广播,

此时的解决方案如下:

自定义的MyAppWidgetProvider继承于AppWidgetProvider,监听android.appwidget.action.APPWIDGET_UPDATE广播

在该类的onReceive()回调方法中,重新注册控件监听。

private void initListener(Context context){
		AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
		int[] appWidgetIds = appWidgetManager.getAppWidgetIds(new ComponentName(context, MyAppWidgetProvider.class));
		RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.appwidget_myprovider);

		Intent intent;
		PendingIntent pendingIntent;
		ComponentName serviceName = new ComponentName(context, MyAppWidgetService.class);

		/** 刷新按钮 */
		intent = new Intent(MyAppWidgetService.MSG_REFRESH);
		intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, appWidgetIds);
		intent.setComponent(serviceName);
		pendingIntent = PendingIntent.getService(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
		views.setOnClickPendingIntent(R.id.appwidget_refresh_new, pendingIntent);

		/** 前一页 */
		intent = new Intent(MyAppWidgetService.MSG_PRE);
		intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, appWidgetIds);
		intent.setComponent(serviceName);
		pendingIntent = PendingIntent.getService(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
		views.setOnClickPendingIntent(R.id.appwidget_last, pendingIntent);

		/** 后一页 */
		intent = new Intent(MyAppWidgetService.MSG_NEXT);
		intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, appWidgetIds);
		intent.setComponent(serviceName);
		pendingIntent = PendingIntent.getService(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
		views.setOnClickPendingIntent(R.id.appwidget_next, pendingIntent);

		appWidgetManager.updateAppWidget(appWidgetIds, views);
	}

 

@Override
	public void onReceive(Context context, Intent intent) {
		super.onReceive(context, intent);
				initListener(context);
	}



 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值