3

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

谢谢!

4

3 回答 3

2

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

如果您需要按名称查找 Android 资源(例如,String -> int 转换),请使用getIdentifier(String, String, String).

第一个参数是字符串形式的资源名称。第二个参数是字符串形式的资源类型(例如,"id"to look inR.id"drawable"to look in R.drawable)。第三个参数是包名。

因此,理论上,您应该能够像这样查找样式资源:

int style = getResources().getIdentifier("MyCustomTheme1", "style", getPackageName());
于 2012-12-29T21:00:31.370 回答
1

是的,有可能。但是你做错了,你应该使用

int animazione = R.style.MyCustomTheme1; // look, no quotes!

AlertDialog.Builder builder = new AlertDialog.Builder(this, animazione);

请注意,采用主题标识符的重载是在API 级别 11中添加的,因此它仅适用于Android 3.0及更高版本。

于 2012-12-29T20:59:14.917 回答
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+。

于 2012-12-29T21:00:39.500 回答