2

Holo Light w/ Dark Action Bar、Holo Light、または Holo Dark テーマのいずれかを使用できる壁紙アプリケーションを開発しています。上記のアプリのユーザーが好きなように 3 の間で変更できるようにする設定アクティビティがあります。

設定アクティビティのスニペットを次に示します。

@Override
protected void onCreate(Bundle savedInstanceState) {


    super.onCreate(savedInstanceState);

    //add the prefernces.xml layout
    addPreferencesFromResource(R.xml.prefs);

    ActionBar bar = getActionBar();
    bar.setTitle(R.string.settings);
    bar.setDisplayHomeAsUpEnabled(true);
}

Prefs.xml:

    <?xml version="1.0" encoding="utf-8"?>

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >

    <ListPreference android:entries="@array/theme" 
                    android:entryValues="@array/themeValues" 
                    android:title="Themes" 
                    android:enabled="true" 
                    android:key="theme" 
                    android:summary="Select which holo theme you prefer."
                    />

</PreferenceScreen>

themes.xml:

    <?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="theme">
        <item>Holo Light with Dark Action Bar</item>
        <item>Holo Light</item>
        <item>Holo Dark</item>
    </string-array>

   <string-array name="themeValues">
        <item>@style/Theme_Light_DarkActionBar</item>
        <item>@style/Theme_Light</item>
        <item>@style/Theme_Dark</item>
    </string-array>
</resources>

テーマを設定するために WallpaperActivity.java で使用しているコード:

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
    String theme = prefs.getString("theme", "defaultTheme");

    setAppTheme(theme);

    setContentView(R.layout.activity_wallpaper);

 void setAppTheme(String s) {
    String[] theme = getResources().getStringArray(R.array.themeValues);
    if (s.matches("theme_light-dark")) {
        //Light-Dark
        setTheme(R.style.Theme_Light_DarkActionBar);

    }
    else if (s.matches("theme_light")) {
        //Light
        setTheme(R.style.Theme_Light);

    }
    else if (s.matches("theme_dark")) {
        //Dark
        setTheme(R.style.Theme_Dark);

    }
    else {
        //Oops
    }
    }

そして最後に logcat の切り取り:

    [ 01-10 05:36:17.947  2621:0xa3d E/AndroidRuntime ]

FATAL EXCEPTION: main

java.lang.NullPointerException

    at android.preference.ListPreference.onDialogClosed(ListPreference.java:264)

    at android.preference.DialogPreference.onDismiss(DialogPreference.java:381)

    at android.app.Dialog$ListenersHandler.handleMessage(Dialog.java:1228)

    at android.os.Handler.dispatchMessage(Handler.java:99)

    at android.os.Looper.loop(Looper.java:137)

    at android.app.ActivityThread.main(ActivityThread.java:4424)

    at java.lang.reflect.Method.invokeNative(Native Method)

    at java.lang.reflect.Method.invoke(Method.java:511)

    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)

    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)

    at dalvik.system.NativeStart.main(Native Method)

他に何か必要な場合はお知らせください。ありがとう!

アップデート:

次のような警告が表示されているようです。

The value of the local variable theme is not used

行の場合:

String[] theme = getResources().getStringArray(R.array.themeValues);
4

0 に答える 0