Warning: include(/home/users/2/lolipop.jp-a-virtual/web/dhmo/dhmo/wp-content/advanced-cache.php): failed to open stream: No such file or directory in /home/users/2/lolipop.jp-a-virtual/web/dhmo/dhmo/wp-settings.php on line 74

Warning: include(/home/users/2/lolipop.jp-a-virtual/web/dhmo/dhmo/wp-content/advanced-cache.php): failed to open stream: No such file or directory in /home/users/2/lolipop.jp-a-virtual/web/dhmo/dhmo/wp-settings.php on line 74

Warning: include(): Failed opening '/home/users/2/lolipop.jp-a-virtual/web/dhmo/dhmo/wp-content/advanced-cache.php' for inclusion (include_path='.:/usr/local/php/5.4/lib/php') in /home/users/2/lolipop.jp-a-virtual/web/dhmo/dhmo/wp-settings.php on line 74
便利な壁紙作ってみた~ライブ壁紙作り方~② – Androidアプリつくったった

便利な壁紙作ってみた~ライブ壁紙作り方~②

お待たせしました。壁紙制作後半戦です。

残すは設定画面を盛り込む場合の以下3項目です
④ 再びManifest.xml
⑤ striing.xml
⑥ Preference.java

④Manifest.xmlに設定画面の設定を書きこむ。

<!– 設定画面 –>
<activity
android:name=”.Preference“         ・・・読み込むjavaファイル
android:label=”@string/wallpaper_settings“ ・・・読み込むXML名の設定
android:theme=”@android:style/Theme.WallpaperSettings”
android:exported=”true”>
</activity>

⑤string.xmlの記述
wallpaper_settingsと設定する場合下記のように記載

<string name=”wallpaper_settings”>wallpaper_settings</string>
⑥ wallpaper_settings.xmlとPreference.javaについて

設定画面の舞台裏です。XMLで形を作って
その情報の細かい扱いをJavaで制御する流れです。
画面の構成はXMLで行います。
簡単なものではXMLだけで簡単に終わらせることもできます。

今回は、設定項目が多いのでこんな感じになります。

<?xml version=”1.0″ encoding=”utf-8″?>
<PreferenceScreen xmlns:android=”http://schemas.android.com/apk/res/android”
android:title=”@string/wallpaper_settings” >

<ListPreference
android:entries=”@array/entries”
android:entryValues=”@array/values”
android:key=”list_key”
android:summary=”@string/list_summary”
android:title=”@string/list_title” />
<EditTextPreference
android:dialogTitle=”@string/edittext_dialogtitle”
android:key=”edittext_key”
android:summary=”@string/edittext_summary”
android:title=”@string/edittext_title” />

<ListPreference
android:entries=”@array/entries”
android:entryValues=”@array/values”
android:key=”list_key2″
android:summary=”@string/list_summary2″
android:title=”@string/list_title2″ />
<EditTextPreference
android:dialogTitle=”@string/edittext_dialogtitle2″
android:key=”edittext_key2″
android:summary=”@string/edittext_summary2″
android:title=”@string/edittext_title2″ />

<ListPreference
android:entries=”@array/entries”
android:entryValues=”@array/values”
android:key=”list_key3″
android:summary=”@string/list_summary3″
android:title=”@string/list_title3″ />
<EditTextPreference
android:dialogTitle=”@string/edittext_dialogtitle3″
android:key=”edittext_key3″
android:summary=”@string/edittext_summary3″
android:title=”@string/edittext_title3″ />

<ListPreference
android:entries=”@array/entries”
android:entryValues=”@array/values”
android:key=”list_key4″
android:summary=”@string/list_summary4″
android:title=”@string/list_title4″ />

 

<EditTextPreference
android:dialogTitle=”@string/edittext_dialogtitle4″
android:key=”edittext_key4″
android:summary=”@string/edittext_summary4″
android:title=”@string/edittext_title4″ />

<ListPreference
android:entries=”@array/entries”
android:entryValues=”@array/values”
android:key=”list_key5″
android:summary=”@string/list_summary5″
android:title=”@string/list_title5″ />

 

<EditTextPreference
android:dialogTitle=”@string/edittext_dialogtitle5″
android:key=”edittext_key5″
android:summary=”@string/edittext_summary5″
android:title=”@string/edittext_title5″ />

<ListPreference
android:entries=”@array/entries”
android:entryValues=”@array/values”
android:key=”list_key6″
android:summary=”@string/list_summary6″
android:title=”@string/list_title6″ />

 

<EditTextPreference
android:dialogTitle=”@string/edittext_dialogtitle6″
android:key=”edittext_key6″
android:summary=”@string/edittext_summary6″
android:title=”@string/edittext_title6″ />
<ListPreference
android:entries=”@array/entries”
android:entryValues=”@array/values”
android:key=”list_key7″
android:summary=”@string/list_summary7″
android:title=”@string/list_title7″ />

 

<EditTextPreference
android:dialogTitle=”@string/edittext_dialogtitle7″
android:key=”edittext_key7″
android:summary=”@string/edittext_summary7″
android:title=”@string/edittext_title7″ />
</PreferenceScreen>

 

 

続いてJavaファイルです。
もうちょっと短く効率的なコードを書けよ
と突っ込まれそうですが、
実は上記のXMLと対応していて私的に管理がしやすいのです。

短いコード = 良いコード ではなく

目的に最適化されているコード
また柔軟な対応ができるコード = 良いコード
と考えています。
今回は言語対応の想定がないためべた書きですが
基本的には言語対応させるためすべてのテキストは
string.xmlで管理した方が効率的です。
非Activityの言語対応などで困ってましたら
こちらのページを参考にしてみてください
それではソースを公開します。

public class Preference extends PreferenceActivity
implements OnPreferenceChangeListener {

// ListPreference
private ListPreference lp;
private ListPreference lp2;
private ListPreference lp3;
private ListPreference lp4;
private ListPreference lp5;
private ListPreference lp6;
private ListPreference lp7;

@Override
protected void onCreate(Bundle icicle) {
super.onCreate(icicle);
getPreferenceManager().setSharedPreferencesName(Main.SHARED_PREFS_NAME);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
addPreferencesFromResource(R.xml.wallpaper_settings);
setListContents();
}
// Summaryを設定
public void setSummary(String param){
CharSequence[] names = lp.getEntries();
lp.setSummary("現在の選択は「"+names[Integer.parseInt(param)-1]+"」です。");
names = null;
}
public void setSummary2(String param){
CharSequence[] names = lp2.getEntries();
lp2.setSummary("現在の選択は「"+names[Integer.parseInt(param)-1]+"」です。");
names = null;
}
public void setSummary3(String param){
CharSequence[] names = lp3.getEntries();
lp3.setSummary("現在の選択は「"+names[Integer.parseInt(param)-1]+"」です。");
names = null;
}
public void setSummary4(String param){
CharSequence[] names = lp4.getEntries();
lp4.setSummary("現在の選択は「"+names[Integer.parseInt(param)-1]+"」です。");
names = null;
}
public void setSummary5(String param){
CharSequence[] names = lp5.getEntries();
lp5.setSummary("現在の選択は「"+names[Integer.parseInt(param)-1]+"」です。");
names = null;
}
public void setSummary6(String param){
CharSequence[] names = lp6.getEntries();
lp6.setSummary("現在の選択は「"+names[Integer.parseInt(param)-1]+"」です。");
names = null;
}
public void setSummary7(String param){
CharSequence[] names = lp7.getEntries();
lp7.setSummary("現在の選択は「"+names[Integer.parseInt(param)-1]+"」です。");
names = null;
}
@Override
protected void onResume(){
super.onResume();
}
/**
*
*/
private void setListContents() {
// ListPreferenceの取得
lp = (ListPreference)findPreference("list_key");
lp.setOnPreferenceChangeListener(this);
lp2 = (ListPreference)findPreference("list_key2");
lp2.setOnPreferenceChangeListener(this);
lp3 = (ListPreference)findPreference("list_key3");
lp3.setOnPreferenceChangeListener(this);
lp4 = (ListPreference)findPreference("list_key4");
lp4.setOnPreferenceChangeListener(this);
lp5 = (ListPreference)findPreference("list_key5");
lp5.setOnPreferenceChangeListener(this);
lp6 = (ListPreference)findPreference("list_key6");
lp6.setOnPreferenceChangeListener(this);
lp7 = (ListPreference)findPreference("list_key7");
lp7.setOnPreferenceChangeListener(this);
// 保存されたデータを読み込む
SharedPreferences p = PreferenceManager.getDefaultSharedPreferences(this);
String param = p.getString("list_key", "");
if(param == null){ param = "1";}
else if(param.equals("")){ param = "1";}
lp.setDefaultValue(param);
setSummary(param);

param = p.getString("list_key2", "");
if(param == null){ param = "1";}
else if(param.equals("")){ param = "1";}
lp2.setDefaultValue(param);
setSummary(param);

param = p.getString("list_key3", "");
if(param == null){ param = "1";}
else if(param.equals("")){ param = "1";}
lp3.setDefaultValue(param);
setSummary(param);

param = p.getString("list_key4", "");
if(param == null){ param = "1";}
else if(param.equals("")){ param = "1";}
lp4.setDefaultValue(param);
setSummary(param);

param = p.getString("list_key5", "");
if(param == null){ param = "1";}
else if(param.equals("")){ param = "1";}
lp5.setDefaultValue(param);
setSummary(param);

param = p.getString("list_key6", "");
if(param == null){ param = "1";}
else if(param.equals("")){ param = "1";}
lp6.setDefaultValue(param);
setSummary(param);

param = p.getString("list_key7", "");
if(param == null){ param = "1";}
else if(param.equals("")){ param = "1";}
lp7.setDefaultValue(param);
setSummary(param);
}
//呼ぶとえらい遅くなる
@Override
protected void onPause(){
super.onPause();
}
// Activityの再開時に実行
public void onRestart()
{
super.onRestart();
if(lp!=null){
lp.setEnabled(true);
}
if(lp2!=null){
lp2.setEnabled(true);
}
if(lp3!=null){
lp3.setEnabled(true);
}
if(lp4!=null){
lp4.setEnabled(true);
}
if(lp5!=null){
lp5.setEnabled(true);
}
if(lp6!=null){
lp6.setEnabled(true);
}
if(lp7!=null){
lp7.setEnabled(true);
}
}

// Activityの停止時に実行
public void onStop()
{
super.onStop();
if(lp!=null){
lp.setEnabled(false);
}
if(lp2!=null){
lp2.setEnabled(false);
}
if(lp3!=null){
lp3.setEnabled(false);
}
if(lp4!=null){
lp4.setEnabled(false);
}
if(lp5!=null){
lp5.setEnabled(false);
}
if(lp6!=null){
lp6.setEnabled(false);
}
if(lp7!=null){
lp7.setEnabled(false);
}
}
@Override
protected void onDestroy()
{
super.onDestroy();
if(lp!=null){
lp.setOnPreferenceChangeListener(null);
lp = null;
}
if(lp2!=null){
lp2.setOnPreferenceChangeListener(null);
lp2 = null;
}
if(lp3!=null){
lp3.setOnPreferenceChangeListener(null);
lp3 = null;
}
if(lp4!=null){
lp4.setOnPreferenceChangeListener(null);
lp4 = null;
}
if(lp5!=null){
lp5.setOnPreferenceChangeListener(null);
lp5 = null;
}
if(lp6!=null){
lp6.setOnPreferenceChangeListener(null);
lp6 = null;
}
if(lp7!=null){
lp7.setOnPreferenceChangeListener(null);
lp7 = null;
}
}

@Override
public boolean onPreferenceChange(android.preference.Preference preference,
Object newValue) {
if(newValue != null)
{
if(preference.toString().startsWith("月曜日")){
setSummary((String )newValue);
return true;
}else if(preference.toString().startsWith("火曜日")){
setSummary2((String )newValue);
return true;
}else if(preference.toString().startsWith("水曜日")){
setSummary3((String )newValue);
return true;
}else if(preference.toString().startsWith("木曜日")){
setSummary4((String )newValue);
return true;
}else if(preference.toString().startsWith("金曜日")){
setSummary5((String )newValue);
return true;
}else if(preference.toString().startsWith("土曜日")){
setSummary6((String )newValue);
return true;
}else if(preference.toString().startsWith("日曜日")){
setSummary7((String )newValue);
return true;
}
return false;
}
return false;
}
}

とここまで公開しましたが、基本的な壁紙の設定は本でもWEB上にも出ていたので

実際にリリースした際いろいろと工夫が必要だったので、

だったらソースを公開した方が役立つかなと今回

長くなるのを承知で掲載する事になりました。

最後にランチャーを付けてActivityを付けてしまうためには

どうすればよいかを書いて終えたいと思います。

おまけ~起動アイコンを利用し設定画面を充実させる~

レイアウトは通常のActivityに設定するように
resフォルダのlayout内にXMLファイル作成し設定できます。

<!– ランチャー –>
<activity android:name=”.Launcher” android:label=”@string/app_name”>
<intent-filter>
<action android:name=”android.intent.action.MAIN” />
<category android:name=”android.intent.category.LAUNCHER” />
</intent-filter>
</activity>

public class Launcher extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//無題のフルスクリーンに設定する。
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.<span style="color: #0000ff;">launcher</span>);
}
public void clickButton(View view) {
//ライブ壁紙設定画面へ
if (view.getId() == R.id.button1) {
Intent intent = new Intent();
intent.setAction(WallpaperManager.ACTION_LIVE_WALLPAPER_CHOOSER);
startActivity(intent);
finish();
}
//設定画面を開く
else if(view.getId() == R.id.button2){
Intent intent=new Intent();
intent.setClassName("jp.gr.java_conf.rcd","jp.gr.java_conf.rcd.Preference");
startActivity(intent);
}
}

}

以上です。

ご参考になれば幸いです。

▼ 関連記事・最近の投稿は記事の下にあります。コチラもご参考ください。


About the Author

dhmo
Author:DHMO(ディベロッパー名) 仕事では自社サービス・メディアの開発を行ってます。 趣味でAndroidアプリ製作を行っています。 カラオケではランキングバトルにはまっております。 Mail: dihydromooxide7@gmail.com 

Be the first to comment on "便利な壁紙作ってみた~ライブ壁紙作り方~②"

Leave a comment

Your email address will not be published.


*