2015-09-06

Android アプリの設定画面を作成

今回は、前回作成した ActionBar を使ったメニューを利用して Android アプリの設定画面を追加します。設定画面を使ってゲームの背景色を変更できるようにしたいと思います。

設定画面の定義を作成


まずは ActionBar のメニューにある "Settings" をタップした時に表示される画面を定義します。今回作成する設定画面は、背景色の選択肢をリストで表示し、選択できるようにします。
  • [res] を右クリックし [新規] → [Android resource file] をクリック

  • [File name:] に "activity_settings" と入力し [Resource type:] は "XML" を選択し [OK] をクリック
  • [res/xml] に作成された "activity_settings.xml" を以下のように編集
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen
    xmlns:android="http://schemas.android.com/apk/res/android">
    <ListPreference
        android:key="background"
        android:title="Background Color"
        android:entries="@array/entries_background"
        android:entryValues="@array/entryvalues_background"
        android:dialogTitle="Background Color" />
</PreferenceScreen>

設定項目のリストを作成


次に、設定画面のリストに表示される設定項目のリストを作成します。先ほど作成した "activity_settings.xml" のファイル内で参照される値を定義しています。選べる背景色の候補として緑と青を定義しています。
  • [values] を右クリックし [新規] → [Values resource file] をクリック
  • [File name: ] に "arrays" と入力し [OK] をクリック
  • [res/values] に作成された "arrays.xml" を以下のように編集
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="entries_background">
        <item>Green</item>
        <item>Blue</item>
    </string-array>
    <string-array name="entryvalues_background">
        <item>GREEN</item>
        <item>BLUE</item>
    </string-array>
</resources>

設定画面を表示するクラスを作成


設定画面を表示するクラスは PreferenceFragment クラスを拡張して作成します。
  • SettingsPreferenceFragment クラスを新規作成し "SettingsPreferenceFragment.java" を以下のように編集
public class SettingsPreferenceFragment extends PreferenceFragment{
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.activity_settings);
    }
}

設定画面を呼び出すクラスを作成


設定画面を呼び出すクラスは MainActivity とは別に用意します。
  • SettingsActivity クラスを新規作成し "SettingsActivity.java" を以下のように編集
public class SettingsActivity extends Activity{
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getWindow().addFlags(
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
        FragmentTransaction fragmentTransaction =
                getFragmentManager().beginTransaction();
        fragmentTransaction.replace(android.R.id.content,
                new SettingsPreferenceFragment());
        fragmentTransaction.commit();
    }
}

"AndroidManifest.xml" の編集


作成した SettingsActivity クラスをアプリが認識できるようにマニフェストファイルを編集します。
  • "AndroidManifest.xml" を以下のように編集
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android=
    "http://schemas.android.com/apk/res/android"
    package="com.example.ball" >
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name"
            android:screenOrientation="landscape" >
            <intent-filter>
                <action android:name=
                    "android.intent.action.MAIN" />
                <category android:name=
                    "android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".SettingsActivity"
            android:screenOrientation="landscape" />
    </application>
</manifest>

設定画面を表示するコードの追加


メニューの "Settings" をタップしたときに設定画面を表示するコードを MainActivity に追加します。
  • "MainActivity.java" の onOptionsItemSelected() を以下のように修正
@Override
public boolean onOptionsItemSelected(MenuItem item) {
    if (item.getItemId() == R.id.action_retry) {
        framelayout.removeAllViews();
        handler.removeCallbacks(this);
        init_flag = false;
    } else if (item.getItemId() == R.id.action_settings){
        Intent intent = new Intent(this, SettingsActivity.class);
        startActivity(intent);
    }
    return super.onOptionsItemSelected(item);
}

以上で、設定画面の作成は完了です。アプリを起動してメニューの "Settings" をタップしてみます。



無事に背景色の選択肢リストが表示されました。この選択肢をタップしたときの処理は実装できていないため、現時点では何も起こりません。実際に背景色を切り替える処理の実装は次回扱います。

関連記事

0 件のコメント:

コメントを投稿