2013年10月8日火曜日

EditTextにおける文字制限の設定(入力候補の非表示など)

EditTextで英数字のみや、数字のみを入力したい場合に、文字制限を行うことができます。EditTextのインスタンスのsetInputTypeでオプションを設定します。
@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        setContentView(R.layout.main);
        
        EditText editText = (EditText)findViewById(R.id.edittext);
        //Not to display any dictionary-based candidates
        editText.setInputType(InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);

    }
EditTextに文字を入力する際に、辞書機能が働き、入力候補が表示されてしまうのを非表示にする設定なども用意されています。

InputTypeの設定オプションは以下の通りです。

  • TYPE_CLASS_DATETIME 日付と時刻
  • TYPE_CLASS_NUMBER 数値
  • TYPE_CLASS_PHONE 電話番号
  • TYPE_CLASS_TEXT 文字列
  • TYPE_TEXT_FRAG_AUTO_COMPLETE オートコンプリート機能
  • TYPE_TEXT_FLAG_AUTO_CORRECT 文字列の自動修正機能
  • TYPE_TEXT_FLAG_CAP_CHARACTERS すべて大文字
  • TYPE_TEXT_FLAG_CAP_SENTENCES センテンスの先頭が大文字
  • TYPE_TEXT_FLAG_CAP_WORDS 単語の先頭が大文字
  • TYPE_TEXT_FLAG_NO_SUGGESTIONS 入力候補の非表示

2013年10月4日金曜日

TimerとHandlerの連携

Androidはシングルスレッドのため、GUI操作はmainスレッドで行われています。Timerを使用する場合には、別スレッドを儲け、Handlerを使用して、mainスレッドにアクセスする必要があります。
以下Timerのサンプルプログラムで説明をしていきます。スタートボタンを押すと、カウントが始まり、ストップボタンを押すとカウントが止まります。

public class TimerExample extends Activity implements OnClickListener{
 TextView timeTextView;
 Button btnStart;
 Button btnStop;
 private Handler mHandler;
 private Timer mTimer;
 private int count = 0;
 
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.timer_example);
  //Setting TextView
  timeTextView = (TextView) findViewById(R.id.time);
  //Setting Button
  btnStart = (Button) findViewById(R.id.btnstart);
  btnStart.setOnClickListener(this);
  btnStop = (Button) findViewById(R.id.btnstop);
  btnStop.setOnClickListener(this);
 }
 
 @Override
 public void onClick(View v) {
  if(v == btnStart){
   if(mTimer != null) return;
   count = 0;
   mTimer = new Timer();
   mHandler = new Handler();
   mTimer.schedule(new TimerTask() {
             public void run() {
                 mHandler.post(new Runnable() {
                     public void run() {
                      ++count;
                      timeTextView.setText(String.valueOf(count));
                     }
                 });
             }
         },0, 1000);
  }
  
  if(v == btnStop){
   if(mTimer == null) return;
   mTimer.cancel();
   mTimer = null;
  }
 }
}

Timer
Timerのメソッドでは、遅延や何秒間隔で繰り返すかなどを設定することができます。

1. Timerのインスタンス
まず最初にTimerのインスタンスを生成します。
mTimer = new Timer();

2. Timerのスケジュール設定
TimerTask()のインスタンスを生成し、遅延や何秒間隔で繰り返すか設定します。
mTimer.schedule(new TimerTask() {
     ...
},0, 1000);



  • TimerTask task: タイマースケジュールのためのタスク
  • long Delay: 最初の実行を行うまでの遅延時間(ms)
  • Period: 繰り返し実行の時間間隔(ms)

  • 3. Timerのキャンセル
    Timerとスケジュールされているタスクのキャンセル。現在実行中のタスクはキャンセルされません。
    mTimer.cancel();

    TimerTask
    決められた時間間隔でタスクを実行します。
    new TimerTask() {
        public void run() {
        ...
        }
    }

    Handler
    Handlerによって、別スレッドからメインスレッドに通信をすることができます。ここではTimerが別スレッドになります。Timerからシグナルが来た時に、Runnable内のコードがメインスレッドとして実行されます。