
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>