夢見ヶ崎動物公園
2012.01.15 夢見ヶ崎動物公園、加瀬山、夕日に遊ぶ子供

  1. 自由研究に戻る
  2. Menu表示

DatePickerのタイトルを変更する

android のトレーニングを始めてみます、多くのサイトがありますが、やってみます。DatePickeのタイトル表示変更です。

DatePicker

Fig.1 タイトル、ボタンの表示変更と、説明の記述の追加
DatePickerのタイトルのデフォルト「日付設定」の「設定」ボタンの表示を変更してみます
また、メッセージを追加します。
android プロジェクトで作成したファイルに下記を書き込みます。
・datePickerDialog.setTitle("生年月日");
・datePickerDialog.setMessage("生年月日を入力してください");
/////////// javaファイル///////////////////////////////////
package menutest.app;

import java.util.Calendar;
import android.app.Activity;
import android.app.DatePickerDialog;
import android.os.Bundle;
import android.content.DialogInterface; 

public class MenutestActivity extends Activity {

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
         
        // 今日の日付を取得
        Calendar c = Calendar.getInstance();
        int year = c.get(Calendar.YEAR);
        int month = c.get(Calendar.MONTH);
        int day = c.get(Calendar.DAY_OF_MONTH);
        // DatePickerDialogを表示
        DatePickerDialog datePickerDialog = new DatePickerDialog(this,null, year, month, day);

        datePickerDialog.setTitle("生年月日");
        datePickerDialog.setButton(DialogInterface.BUTTON_POSITIVE,"OK",
                new DialogInterface.OnClickListener() {   
            public void onClick(DialogInterface dialog, int which) {   
                // Positive Button がクリックされた時の動作  null);
                }
            }
        );
        datePickerDialog.setMessage("生年月日を入力してください");     
        datePickerDialog.show(); 
    }
}
参考サイト
DatePickeのタイトル
xmlでのレイアウト作成まとめ
DatePickerDialogで日付を入力する

PreferenceScreenへDatePicker表示

android のトレーニング、PreferenceScreenからDatePickerを表示するときに
・INTENTを使って別画面に表示
・OnPreferenceClickを使って同じ画面に表示
の確認をしてみます。

(1)main Activityの画面
ButtonをClickで(2)の画面をIntentで起動します。
・button.setOnClickListener(new View.OnClickListener() を組み込みます。
・startActivityで次の(2)の画面を開きます。

DatePicker

Fig.2 メイン画面
///// java ファイル/////////////////////////////////
package menuintent.app;
import android.app.Activity;
import android.os.Bundle;
import android.content.Intent;
import android.view.View;
import android.widget.Button;

public class MenuIntentActivity extends Activity {

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        Button button = (Button) findViewById(R.id.button1);        
        button.setOnClickListener(new View.OnClickListener() {
       @Override
            public void onClick(View view){    
               startActivity(new Intent(getApplicationContext(), menuintent.app.menuintent_sub_PreferenceActivity.class));
           }
        });
    }
}

(2)intentで起動されたPreferenceActivityの画面

preferenceScreen

Fig.3 PreferenceScreen画面です、xmlファイルは下記です。
注意点はandroid:keyを全部設定しないとうまく動きませんでした。使わなくても設定しないと実行時にエラーが発生しました。
///////// xmlファイル /////////
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" 
    android:summary="設定項目です" android:title="設定">
    <EditTextPreference android:title="連絡先" android:summary="住所を記入ください"
        android:key="edit_text_1" />
    <EditTextPreference android:title="職業" android:summary="仕事内容を書いてください"
        android:key="edit_text_2" />       
    <PreferenceScreen android:title="生年月日(1)" android:summary="別画面(intent確認)で開きます"
        android:key="pref_intent" > 
         <intent  
          android:action="android.intent.action.MAIN"  
          android:targetPackage="menuintent.app"  
          android:targetClass="menuintent.app.menu_datepicker" >        
         </intent>       
    </PreferenceScreen>
    <Preference android:title="生年月日(2)" 
        android:summary="ポップアップ画面(onPreferenceClick確認)で開きます"
        android:key="prefKey" >  
    </Preference>
    </PreferenceScreen>

///////////////////////////
java ファイルは下記です、
setOnPreferenceClickListenerも実装しています。
public boolean onPreferenceClickを@Override してます。
///////////////////////////
package menuintent.app;

import java.util.Calendar;
import android.app.DatePickerDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.preference.Preference;
import android.preference.Preference.OnPreferenceClickListener;
import android.preference.PreferenceActivity;

public class menuintent_sub_PreferenceActivity extends PreferenceActivity{
    
       @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            addPreferencesFromResource(R.xml.menu_preference);

            // Preferenceのkey取得
            Preference prefclick = (Preference) findPreference("prefKey");            
            //OnPreferenceClickListenerをハンドルする   
            prefclick.setOnPreferenceClickListener(new OnPreferenceClickListener(){ 
                  @Override 
                public boolean onPreferenceClick(Preference preference) {   
                    return onPreferenceClick1(preference);   
                }
            });
       }       
       public boolean onPreferenceClick1(Preference preference){
               // 今日の日付を取得
             Calendar c = Calendar.getInstance();
             int year = c.get(Calendar.YEAR);
             int month = c.get(Calendar.MONTH);
             int day = c.get(Calendar.DAY_OF_MONTH);    
             
             // DatePickerDialogを表示
             DatePickerDialog datePickerDialog = new DatePickerDialog(this,null, year, month, day);
             
             datePickerDialog.setTitle("onPreferenceClick確認");
             datePickerDialog.setButton(DialogInterface.BUTTON_POSITIVE,"OK",
                     new DialogInterface.OnClickListener() {   
                 public void onClick(DialogInterface dialog, int which) {   
                     // Positive Button がクリックされた時の動作  null);
                     }
                 }
             );
             datePickerDialog.setMessage("生年月日を入力してください");     
             datePickerDialog.show();    
        return true;
    } 
}
(3)PreferenceScreenからINTENTで起動された別のActibityにDate Pickerを表示

preferenceScreen

Fig.4
////////////////////////////////////////////////
別activityのjavaファイルは下記になります。
////////////////////////////////////////////////
package menuintent.app;

import java.util.Calendar;

import android.app.Activity;
import android.app.DatePickerDialog;
import android.content.DialogInterface;
import android.os.Bundle;

public class menu_datepicker extends Activity {
       /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.menu_datepicker);
        setTitle("intent確認");
       
        // 今日の日付を取得
        Calendar c = Calendar.getInstance();
        int year = c.get(Calendar.YEAR);
        int month = c.get(Calendar.MONTH);
        int day = c.get(Calendar.DAY_OF_MONTH);
        // DatePickerDialogを表示
        DatePickerDialog datePickerDialog = new DatePickerDialog(this,null, year, month, day);

        datePickerDialog.setTitle("Intent確認");
        datePickerDialog.setButton(DialogInterface.BUTTON_POSITIVE,"OK",
                new DialogInterface.OnClickListener() {   
            public void onClick(DialogInterface dialog, int which) {   
                // Positive Button がクリックされた時の動作  null);
                }
            }
        );
        datePickerDialog.setMessage("生年月日を入力してください");     
        datePickerDialog.show(); 
    }
}
(4)PreferenceScreenからonPreferenceClickLを用いて同じPreferenceScreenの画面にDatePickerを表示
プログラムは上記の(2)intentで起動されたPreferenceActivityの画面に実装しています。

onPreferenceClickで表示

Fig.5,ポップアップで表示されます。


参考サイト
Android アプリ設定画面を作成する PreferenceScreen(別アクティビティ)
PreferenceActivityからIntentを呼び出す

DatePickerにソフトキーによる数字入力

android のトレーニング、ソフトキーボードが有効にならないのは何故なの、有効にするにはどうすればいいのでしょう。

ソフトキーボード表示

Fig.6,ソフトキーボードが表示されます。
datepickerにはソフトキーボードが実装されているので、特別にプログラムを作る必要はないようです。 下記サイトにあるように、SDKのエミュレータで確認(実行)するためには、AVD Managerを作る時に、キーボード無しに設定して実行するようです。 すると、Date pickerの数字をダブルクリックするとソフトキーボードが現れました。
参考サイト
Android ダイアログ表示時にソフトキーボードを出す
EditTextを持つダイアログ(AlertDialog)が表示された時に自動的にソフトキーボードを表
Android setSoftInputMode()をエミュレータで試すときは hw.keyboard を no にしましょう。