我有这段代码,我需要将MyCustonTheme1更改为2或3或4(来自sharedpreferences的值,用户选择一个值(1,2,3,4)
AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.MyCustomTheme1);
在MainActivity中我:
if (fade == 500){
animazione = "R.style.MyCustomTheme1";
}
if (fade == 1000){
animazione = "R.style.MyCustomTheme2";
}
[...]
现在,我需要像这段代码一样放“animazione”:
AlertDialog.Builder builder = new AlertDialog.Builder(this, animazione);
构造函数AlertDialog.Builder(MainActivity,String)未定义
是否有可能将R.style.MyCustomTheme1变为像“animazione”这样的变量?
谢谢!
答案 0 :(得分:2)
注意:不鼓励使用此功能。效率更高 按标识符而不是按名称检索资源。
如果您需要按名称查找Android资源(例如,字符串 - > int转换),请使用getIdentifier(String, String, String)
。
第一个参数是资源名称作为字符串。第二个参数是资源类型作为字符串(例如,"id"
查看R.id
,或"drawable"
查看R.drawable
)。第三个参数是包名。
因此,从理论上讲,您应该能够查找这样的样式资源:
int style = getResources().getIdentifier("MyCustomTheme1", "style", getPackageName());
答案 1 :(得分:1)
是的,它可能。但是你做错了,你应该使用
int animazione = R.style.MyCustomTheme1; // look, no quotes!
AlertDialog.Builder builder = new AlertDialog.Builder(this, animazione);
请注意, API级别11 中添加了带有主题标识符的重载,因此它只能在 Android 3.0 及更高版本中使用。
答案 2 :(得分:1)
如果您想要更改AlertDialog.Builder
的样式,那么您必须传递上下文和样式。样式是一个int,但是你传入一个字符串。将其更改为:
int animazione; // change it to an int
if (fade == 500){
animazione = R.style.MyCustomTheme1;
}
else if (fade == 1000){ // also add an 'else' in here (else if)
animazione = R.style.MyCustomTheme2;
}
[...]
AlertDialog.Builder builder = new AlertDialog.Builder(this, animazione);
就像k-ballo已经指出的那样,这只能从API等级11 +中获得。