改变风格(使用变量)

时间:2012-12-29 20:55:33

标签: android

我有这段代码,我需要将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”这样的变量?

谢谢!

3 个答案:

答案 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 +中获得。