我有一个widgetProvider.我还有一个服务类来完成小部件的计算.
小部件在初始化时运行正常.当我尝试在我想要做出反应的广播事件(时间变化)之后从onReceive方法中调用服务时,我收到错误.
如何在收到广播事件后从onReceive更新小部件?
这是我的小部件
public class HijriWidget extends AppWidgetProvider{
...
@Override
public void onReceive(Context context, Intent intent) {
if(Intent.ACTION_TIME_CHANGED.equals(intent.getAction())||Intent.ACTION_DATE_CHANGED.equals(intent.getAction())){
//THE CODE BELOW LEADS TO AN EXCEPTION. HOW CAN I UPDATE THE WIDGET HERE?
RemoteViews remoteView = new RemoteViews(context.getPackageName(), R.layout.widget);
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
int appWidgetId = intent.getExtras().getInt(AppWidgetManager.EXTRA_APPWIDGET_ID);
appWidgetManager.updateAppWidget(appWidgetId, remoteView);
}
super.onReceive(context, intent);
}
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,int[] appWidgetIds) {
for (int appWidgetId : appWidgetIds) {
PendingIntent updatepending = HijriWidget.makeControlPendingIntent(context,RefreshService.UPDATE, appWidgetId);
pi = updatepending;
try {
updatepending.send();
} …Run Code Online (Sandbox Code Playgroud) 我想更改我的小部件中的字体,以便它使用我的应用程序的"assets"文件夹中的特定字体.
我通常在我的应用程序中执行此操作来更改字体:
Typeface tf= Typeface.createFromAsset(getAssets(), "advertising.ttf");
TextView converted = (TextView)findViewById(R.id.TextView03);
converted.setTypeFace(tf);
Run Code Online (Sandbox Code Playgroud)
它就像一个魅力.
我怎么能在小部件中这样做?我只能设置文本并更改颜色:
remoteView.setTextViewText(R.id.TextView03,"some text" );
remoteView.setTextColor(R.id.TextView03, Color.BLACK);
Run Code Online (Sandbox Code Playgroud)
但我没有看到设置字体的方法.有什么帮助吗?