我正在实现我自己的自定义DialogPreference子类,如下所示:
public class MyCustomPreference extends DialogPreference
{
private static final String androidns = "http://schemas.android.com/apk/res/android";
private String mDialogMsg;
public MyCustomPreference(Context context, AttributeSet attrs)
{
super(context, attrs);
mDialogMsg = attrs.getAttributeValue(androidns, "dialogMessage");
...
}
...
}
如您所见,我获取了dialogMessage XML属性并将其保存在成员变量mDialogMsg中.
我的问题是:我当前的代码不允许将dialogMessage XML属性指定为XML中的字符串资源ID.
换句话说,这有效:
android:dialogMessage="Hello world!"
但这不是:
android:dialogMessage="@string/hello_world"
如果我在XML中将其指定为资源ID,则资源ID将保存到mDialogMsg,而不是字符串资源本身.现在,我知道我能做到:
context.getString(attrs.getAttributeValue(androidns, "dialogMessage"))
但是,用户将无法在XML中输入正常的字符串(即非资源ID).我想让用户选择同时执行这两项操作.我该怎么做呢?
解决方法:
int resId = attrs.getAttributeResourceValue(androidns, "dialogMessage", 0);
if(resId != 0){
mDialogMsg = getContext().getResources().getString(resId);
} else{
mDialogMsg = attrs.getAttributeValue(androidns, "dialogMessage");
}