Android(Java)を始める – PreferenceActivityで設定画面を作る

Filed under Android, Java

Androidの勉強中。

PreferenceActivityを使うと簡単に設定画面を作れます。

さらにデータの保存も勝手にやってくれるようです。

こりゃ便利。

そんな訳で、設定画面で名前を選択してそれを表示させるだけの簡単なサンプルです。

以下、今回のソースです。

Main.java。

package jp.sakef;

import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.ActivityInfo;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;

public class Main extends Activity implements OnClickListener
{
	private LinearLayout layout;
	private Button btn;
	private TextView text;

	// Activity作成時に実行
	public void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
		setContentView(R.layout.main);

		layout=(LinearLayout)findViewById(R.id.mainLayout);
		btn = (Button)findViewById(R.id.btn);
		text = (TextView)findViewById(R.id.text);

		btn.setOnClickListener(this);
		setName();
	}

	// クリック時の処理
	public void onClick(View v)
	{
		Intent intent=new Intent();
		intent.setClassName(getPackageName(), getPackageName() + ".Setting");
		startActivity(intent);
	}

	// 保存データをとってくる関数
	private void setName()
	{
		SharedPreferences p = PreferenceManager.getDefaultSharedPreferences(this);
		String param = p.getString("name", "");
		if(param == null) param = "1";
		else if(param.equals("")) param="1";
		String[] names = getResources().getStringArray(R.array.entries);
		text.setText(names[Integer.parseInt(param)-1]);
	}

	// Activity破棄時に実行
	public void onDestroy()
	{
		super.onDestroy();	

		layout.removeAllViews();
		btn.setOnClickListener(null);

		btn = null;
		text = null;
		layout = null;
	}

	// Activityの再開時に実行
	public void onRestart()
	{
		super.onRestart();

		layout.setEnabled(true);
		text.setEnabled(true);
		btn.setEnabled(true);

		setName();
	}

	// Activityの停止時に実行
	public void onStop()
	{
		super.onStop();

		layout.setEnabled(false);
		text.setEnabled(false);
		btn.setEnabled(false);
	}
}

main.xml。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id = "@+id/mainLayout"
android:orientation="vertical"
android:gravity = "center_horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding = "10px"
android:background = "#000000">
    <Button
    android:id = "@+id/btn"
    android:text = "設定画面"
    android:width = "120px"
    android:height = "30px"
    android:layout_width = "wrap_content"
    android:layout_height = "wrap_content"
    android:layout_margin = "10px" />
    <TextView
    android:id = "@+id/text"
    android:gravity = "center_horizontal"
    android:layout_width = "fill_parent"
    android:layout_height = "wrap_content"
    android:layout_marginTop = "20px"
    android:textSize = "25px"
    android:width = "200px"
    android:textColor = "#FFFFFF" />
</LinearLayout>

Setting.java。

package jp.sakef;

import android.content.SharedPreferences;
import android.content.pm.ActivityInfo;
import android.os.Bundle;
import android.preference.ListPreference;
import android.preference.Preference;
import android.preference.PreferenceActivity;
import android.preference.PreferenceManager;
import android.preference.Preference.OnPreferenceChangeListener;

public class Setting extends PreferenceActivity implements OnPreferenceChangeListener
{
	// ListPreference
	private ListPreference lp;

	// Activity作成時に実行
	public void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
		addPreferencesFromResource(R.layout.setting);

		// ListPreferenceの取得
		lp = (ListPreference)findPreference("name");
		lp.setOnPreferenceChangeListener(this);

		// 保存されたデータを読み込む
		SharedPreferences p = PreferenceManager.getDefaultSharedPreferences(this);
		String param = p.getString("name", "");
		if(param == null) param = "1";
		else if(param.equals("")) param = "1";
		lp.setDefaultValue(param);
		setSummary(param);
	}

	// ListPreferenceを変更したときに実行
	public boolean onPreferenceChange(Preference preference, Object newValue)
	{
		if(newValue != null)
		{
			setSummary((String)newValue);
			return true;
		}
		return false;
	}  

	// Summaryを設定
	public void setSummary(String param)
	{
		CharSequence[] names = lp.getEntries();
		lp.setSummary("現在の選択は「"+names[Integer.parseInt(param)-1]+"」です。");
		names = null;
	}

	// Activity破棄時に実行
	public void onDestroy()
	{
		super.onDestroy();
		lp.setOnPreferenceChangeListener(null);
		lp = null;
	}

	// Activityの再開時に実行
	public void onRestart()
	{
		super.onRestart();
		lp.setEnabled(true);
	}

	// Activityの停止時に実行
	public void onStop()
	{
		super.onStop();
		lp.setEnabled(false);
	}
}

setting.xml。

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
	<PreferenceCategory android:title="設定画面">
		<ListPreference
		android:key = "name"
		android:title = "名前を選択"
		android:dialogTitle = "名前を選択"
		android:entries="@array/entries"
		android:entryValues="@array/entryValues"/>
    </PreferenceCategory>
</PreferenceScreen>

arrays.xml。

<?xml version="1.0" encoding="utf-8"?>
<resources>
	<string-array name="entries">
		<item>山田 太郎</item>
		<item>田中 次郎</item>
		<item>佐藤 三郎</item>
	</string-array>
	<string-array name="entryValues">
		<item>1</item>
		<item>2</item>
		<item>3</item>
	</string-array>
</resources>

Post a Comment

Your email is never published nor shared.