DatePickerのダイアログ表示

DatePickerのダイアログ表示

DatePickerをダイアログ表示することで
より使いやすくなる

ダイアログ表示するには
DatePickerDialog
を使う

DatePickerDialogの作成、表示はJavaで行う
これは、カレンダーの予約とかスケジュール管理に使える

private void showDatePickerDialog(){

Calender calender = Calender.getInstance();
int year = calender.get(Calender.Year);
int month = calender.get(Calender.Month);
int day = calender.get(Calender.DAY_OF_MONTH);

DatePickerDialog digDatePicker = new DatePickerDialog(this, new OnDateSetListener(){

@Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth){

//選択した日付を検出
String date = year+"/"+monthOfYear+"/"+dayOfMonth;
Toast.makeText(MainActivity.this, "選択した日付は、"+date, Toast.LENGTH_SHORT).show();
}
},year, month, day);

digDialogPicker.show();
}

これで、DatePickerDialogが表示される

次に、TimePickerDialogについて
こちらは、目覚ましとかアラーム、ストップウォッチなど、主にタイマー関連で使える

TimePickerDialogもJavaで生成と表示を行う

private void showTimePickerDialog(boolean isUse24hour){

//現在の時間を取得
Calender calender = Calender.getInstance();

int hour = calender.get(Calender.HOUR_OF_DAY);
int minute = calender.get(Calender.MINUTE);


TimePickerDialog tDialog = new TimePickerDialog(this, new TimePickerDialog.OnTimeSetListener(){

@Override
public void OnTimeSet(TimePicker view, int hourOfDay, int minute){

//選択した時間を検出
String time = hourOfDay+":"+minute;
Toast.makeText(MainActivity.this,"選択した時間は、"+time+" です",Toast.LENGTH_SHORT).show();
}
},hour, minute, isUse24hour);
tDialog.show();
}

DatePickerやTimePickerでセットするリスナーとの違いは
DatePickerDialogで日付を取得するリスナーは
DatePickerで日付を取得するときに利用するものと違うものを使うけど
使い勝手は同じ

TimePickerDialogもTimePickerとは使うリスナーは違うけど
使い勝手は同じ

DatePickerへ初期値のセット

DatePickerへ初期値のセット

DatePickerの
updateDate()を使うと任意の年月日をセットできる

これは、登録画面とか
アンケートなどの入力画面で使われる

よく使われるデフォルトの値の設定にも使える

まずは、updateDate()で年月日の設定

//2014/06/21に設定
int year = 2014;
int month = 6-1;
int day = 21;

次に、日付のセット

DatePicker datepicker = (DatePicker)findViewById(R.id.datepicker);
datepicker.updateDate(year,month,day);

これで、デフォルトで
2014/06/21になる

次に、TimePickerに任意の値のセット
これは、乗り換え案内アプリとか
タイマー、目覚ましなどに使える

TimePickerは
setCurrentHour()で任意の時間をセット
setCurrentMinute()で任意の分をセット

もし、0:00に設定するなら

TimePicker timepicker = (TimePicker)findViewById(R.id.timepicker);
timepicker.setCurrentHour(0);
timepicker.setCurrentMinute(00);

となる

次に、任意の数値をセットするNumberPicker

これは、色々活用できて
デフォルトの値をセットするのに使える

セットするには
setValue()を使う
もし、50をセットするなら

NumberPicker numpicker = (NumberPicker)findViewById(R.id.numberpicker);
numpicker.setValue(50);

Picker関連の注意点として
DatePicker
TimePickerでは、現実に存在しない値をセットしても反映されない
例えば29時とかは無効になる

また、NumberPickerを使う場合
最大値を超えない処理を追記すること

Androidで、DatePicker

Androidで、DatePicker

DatePickerは、カレンダーとかのようなものを使うことで
日付などを入力しやすくするもの

DatePickerは、
onDateChangedListenerをセットすることで、
日付の取得を容易に行うことができる

まずは、レイアウトファイルで
DatePickerを設置する

<DatePicker
android:id="@+id/datepicker"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>

次に、Javaでインスタンスの取得

DatePicker datepicker = (DatePicker)findViewById(R.id.datepicker);

そして、DatePicker初期化とリスナー設定を行う

datepicker.init(yeah, month, day, new onDateChangedListener(){

@Override
public void onDateChanged(DatePicker view, int yeah, int monthOfYear, int dayOfMonth){

//選択した日付を検出
String date = year+"/"+monthOfYear+"/"+
dayOfMonth;
Toast.makeText(MainActivity.this,"今日は "+date+" です", Toast.LENGTH_SHORT).show();
}
});

Picker関連は大きく分けると3つになり
DatePicker
TimePicker
NumberPicker
となる

このうち、DatePickerだけは
リスナー設置方法が初期化と同時に行う

また、補助的なViewとして
カレンダー表示機能も使えるため
DatePickerを使うときにはレイアウト領域を多めに確保しておくこと

Androidで、ズームコントロール

Androidで、ズームコントロール

指2本でピンチイン、ピンチアウトするのではなく
+-ボタンを設置して拡大縮小するときに使う

これを使うメリットは、片手操作が可能になること

ズームコントロールを使うには、
ZoomControlsを使う

ズームイベントは
setOnZoomClickListener

ズームアウトイベントは
setOnZoomOutClickListener
で検出できる

まずは、レイアウトファイルで定義
とりあえず、今回はわかりやすさ重視のため
TextViewの文字のズーム
応用としては、写真とかカメラ画像など
色々使える

<TextView
android:id="@+id/text"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"/>

<ZoomControls
android:id="@+id/zoomcontrols"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"/>

android:layout_alignParentBottom=”true”
android:layout_alignParentRight=”true”
を設定することで、画面右下に
ズームボタンを設置

処理は、Javaで書くことになるので
まずは、Zoomcontrolsのインスタンス取得

final ZoomControls zc = (ZoomControls)findViewById(R.id.zoomcontrols);

TextView tvContents = (TextView)findViewById(R.id.text);

次に、ズームイン処理
setOnZoomClickListenerをセットして
+ボタンを押したときの動作を設定

zc.setOnZoomClickListener(new OnClickListener(){

@Override
public void onClick(View v){

scale +=0.1;
if(scale > 4) scale =4;

tvContents.setScaleX(scale);
tvContents.setScaleY(scale);
tvContents.setText(String.valueOf(scale));
}
});

次に、ズームアウト処理
これは、
setOnZoomOutClickListener
をセットすることで、
-ボタンを押したときの動作を設定

zc.setOnZoomOutClickListener(new OnClickListener(){

@Override
public void onClick(View v){

scale -=0.1;
if(scale <= 1) scale =1; tvContents.setScaleX(scale); tvContents.setScaleY(scale); tvContents.setText(String.valueOf(scalef)); } }); [/java] ZoomControlsは、ボタン設置はできるけど 拡大縮小機能は自分でズーム倍率を作成する必要があるので注意

Spinnerの利用

Spinnerの利用

Spinnerは、ArrayAdapterを使い
文字配列をセットすることで
ドロップダウンリストを表示できる

これは、Wikipediaのモバイル画面ででる
タップすると詳細がでるようなかんじ

まずは、レイアウトファイルで定義

<Spinner
android:id="@+id/spinner"
android:layout_width="wrap_content"
layout_height="wrap_content"/>

次に、Javaでdropdownリストに表示するアイテムを設定するため
Adapterを作成してSpinnerへセット

まずは、Adapterの作成

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item);

adapter.setDropdownViewResource(android.R.layout.simple_spinner_dropdown_item);

adapter.add("red");
adapter.add("blue");
adapter.add("green");

次に、SpinnerへAdapterをセット

Spinner spinner = (Spinner)findViewById(R.id.spinner);
spinner.setAdapter(adapter);

次に、Spinnerへ
setOnItemSelectedListener
をセットし、アイテムが選択されたときのイベント取得

spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener(){

@Override
public void OnItemSelected(AdapterView<?> parent, View view, int position, long id){

String item = (String)parent.selectedItem();
Toast.makeText(MainActivity.this, item + "を選択しました", Toast.LENGTH_SHORT).show();

}

@Override
public void onNothingSelected(AdapterView<?> arg0){
}
});

これで実装できる

setOnSelectedItemListener
を使うときの注意点は、
setOnSelectedItemListenerを使えばアイテムが
セットされたときのイベント取得ができるけど
画面回転などでonCreate()
が呼ばれるたびに実行されてしまうこと

Androidでレーティンクバー

Androidでレーティンクバー

レーティンクバーを使うには、
レイアウトファイルからRatingBarのインスタンスを取得し
setOnRatingBarChangeListener
を登録することで使える

レーティンクバーは、評価をするアプリで使う
口コミとか、もしくはゲームなど
色々使える

まず、レイアウトファイルでレーティンクバーの定義

<RatingBar
android:id="@+id/ratingbar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:numStars="5"
android:stepSize="1.0"/>

numStars=””は、評価の値
stepSize=””は、評価の幅で
1.0なら1.0ずつの評価で0.5とかはできなくなる

次に、Javaで変更検出の実装

これは、
setOnRatingBarChangeListenerを使うことで
レーティンクの変更を検出する

まずは、レイアウトファイルからRatingBarインスタンスの取得

final RatingBar ratingbar = (RatingBar)findViewById(R.id.ratingbar);

次に、RatingBarインスタンスへリスナーを追加し
レーティンクが変化したら
トーストでメッセージ表示する

ratingbar.setOnRatingBarChangeListener(new OnRatingBarChangeListener(){

public void onRatingChanged(RatingBar ratingbar, float rating, boolean fromUser){

Toast.makeText(MainActivity.this, "Change Rating", Toast.LENGTH_SHORT).show();
}
});

レーティンク検出は
生成したインスタンスへ
setOnRatingBarChangeListener
を登録し
onRatingChanged(){

}
の内部へ処理を記述することで
レーティンクに変化があったときのみ処理する

入力サジェスト

入力サジェスト

入力サジェストを使うには、
AutoCompleteTextViewを使う

あらかじめサジェスト候補の文字列をセットしておくことで
該当する文字を途中まで入力すると候補がでてくるので便利

携帯とかの文字予測みたいなかんじ

AutoCompleteTextViewは、サジェスト機能が使えるTextView

使い勝手は、TextViewと同じ

まず、レイアウトファイルで
AutoCompleteTextViewを定義

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Address"/>

<AutoCompleteTextView
android:id="@+id/autocomplete"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"/>

次に、ArrayAdapterクラスで
入力サジェストのAdapterを作成して
setAdapter()でセット

AutoCompleteTextView autoText = (AutoCompleteTextView)findViewById(R.id.autocomplete);

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_line, androids);

autoComplete.setAdapter(adapter);

サジェスト入力の利用例としては
AutoCompleteTextViewは、
ArrayList型の
Adapterオブジェクトをセットするだけでサジェストを実現できるので
入力履歴のリストを利用すれば履歴をサジェストできるし
Google Suggest API
を使えば
Web検索候補を表示できるため
EditTextより使いやすいものを作れる

Androidで入力文字の制限

Androidで入力文字の制限

EditTextで入力文字の制限をするには
inputFilterを使う

例えば、メルアドしか入力できないようにするなら

レイアウトファイルで定義

<EditText
android:id="@+id/mailform"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:hint="メルアドのみ入力可"
android:textSize="16sp"/>

次に、Javaで文字制限を行うinputFilterを設定

生成したInputFilterは
InputFilterの配列へ格納し
setFilters()を使ってEditTextへセットする

まず、メルアド用のフィルターを作成

InputFilter inputFilter = new InputFilter(){

@Override
CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend){

if(source.toString().matches("^[0-9a-zA-Z@¥¥.¥¥_¥¥-]+$")){
return source;
}else{
return "";
}
}
};

次に、フィルターの格納

InputFilter[] filters = new InputFilter[]{
 inputFilter
};

そして、フィルターの適用

editText.setFilters(filters);

EditTextは、
inputType=””
とか
max=””
で入力タイプとか文字数の指定ができるけど
これだと定義したものだけしかフィルタリングできない

これに対して
InputFilterは、正規表現を使うことで入力を細かく指定できるし
inputFilterを複数指定できるので
こちらのほうが使いやすい

文字数制限といえば、Twitterだと
140文字制限なので
tweet用の入力欄で140文字までにするなら

InputFilter lengthFilter = new InputFilter.LengthFilter(140);

InputFilter[] filters = new InputFilter[]{
lengthFilter
};

editText.setFilters(filters);

Androidで入力ヒントの表示

Androidで入力ヒントの表示

入力ヒントを表示するには
EditTextで
android:hint=””
を使うことでできるようになる

ソースにすると

<EditText
android:id="@+id/hint"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:hint="入力ヒント"/>

http://andante.in/i/%E3%82%B3%E3%83%B3%E3%83%9D%E3%83%BC%E3%83%8D%E3%83%B3%E3%83%88/edittext%E3%81%AE%E6%96%87%E5%AD%97%E5%88%B6%E9%99%90%E3%83%92%E3%83%B3%E3%83%88%E3%81%A8%E3%81%8B%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/
にわかりやすい解説があるので参考に

Androidでパスワードの入力

Androidでパスワードの入力

Androidで入力欄でパスワードなどを使うときに
●●●
というように表示するなら
EditTextで
android:inputType=””

textPassword
を設定する

また、Webフォーム入力に最適化された
textWebPassword

数字パスワードに最適化された
numberPassword
などがある

とりあえず、普通のパスワードの場合のソース

これで、入力すると●●●というようになる