7

看遍了每一个问题,不能让它工作。

我想设置一个带有字符串值的 AppWidgets 布局(因此只需更改字符串即可将布局切换到另一个布局)。

String NoteString = "R.layout.widget_blue".toString();

int resID = context.getResources().getIdentifier(NoteString, "layout", context.getPackageName());

RemoteViews views = new RemoteViews(context.getPackageName(), resID);

不知道为什么它不起作用,小部件只是说:“加载小部件时出现问题”..

这工作正常:

RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget_blue);

谢谢

4

3 回答 3

18

为了从字符串组件构造资源 ID,您必须将各个组件传递给getIdentifier(),而不是将完全限定的 ID 作为单个参数传递:

//Get the ID for R.layout.widget_blue
int resID = context.getResources().getIdentifier("widget_blue", "layout", context.getPackageName());

然后只需更改第一个参数名称即可获得不同的布局资源。

于 2012-12-17T21:54:46.730 回答
1

你为什么要使用 getIdentifier 呢?既然您无论如何都在其中包含了硬编码字符串,那么为什么不直接使用包含的资源标识符,就像您在第二个示例中所做的那样。如 getIdentifier() 方法的文档中所述,这样效率更高:

注意:不鼓励使用此功能。按标识符检索资源比按名称检索资源效率更高。

于 2012-12-17T21:58:20.657 回答
0

下面是一组通过名称获取资源标识符的调用:对 AppWidgets 尤其有用

布局

val viewId = context.resources.getIdentifier("my_custom_layout", "layout", context.packageName)

来自 res/drawable 的图像

val viewId = context.resources.getIdentifier("my_image", "drawable", context.packageName)

根据资源名称查看

val viewId = context.resources.getIdentifier("my_textview_id", "id", context.packageName)

细绳

val viewId = context.resources.getIdentifier("my_string", "string", context.packageName)
于 2022-01-27T10:30:04.403 回答