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リソースを名前で検索する必要がある場合(たとえば、文字列-> int変換)、を使用しますgetIdentifier(String, String, String)

最初のパラメータは、文字列としてのリソース名です。2番目のパラメーターは、文字列としてのリソースタイプです(たとえば、"id"検索するR.id、または"drawable"検索するR.drawable)。3番目のパラメーターはパッケージ名です。

したがって、理論的には、次のようなスタイルリソースを検索できるはずです。

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で追加されたため、 Android3.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 に答える