ブログトップ

智信の部屋

tomonobu.exblog.jp

プログラムに関する雑談なんかを書いていこうと思います。(android記事のまとめサイトはこちらです→http://tomonobu.rocketserver.jp/android_blog_index.php)

カテゴリ:android( 48 )

以前の「AlertDialogでのChoiceリスト表示」で
AlertDialog を選択式の ChoiceDialog として使用できるようにしたが、
今回はさらにマルチ選択を可能とする MultiChoiceDialog として使用できるようにする。

参考資料
 「Android AlertDialogを表示する

環境
 Android 2.1-update1

 ・AlertDialog においてチェックボタン付きのリスト表示を行うために
  クラスとして AlertDialog.Builder を使用する。
 ・チェックボタン付きのリスト表示の設定は
  setMultiChoiceItems を使用する。
  今回は
   setMultiChoiceItems (CharSequence[] items, boolean[] checkedItems, DialogInterface.OnMultiChoiceClickListener listener)
  を使用する。
  【引数】
   items
    表示を行うリストのアイテムを設定する
   checkedItems
    初期で選択されているアイテムを設定する
   listener
    アイテム押下でのクリックリスナーを設定する
 ・アイテム設定の完了を行うために setPositiveButton を使用する。
  今回は
   setPositiveButton (CharSequence text, DialogInterface.OnClickListener listener)
  を使用する。
  【引数】
   text
    ボタンの表示タイトルを設定する
   listener
    ボタン押下でのクリックリスナーを設定する
 ・キャンセル時の動作を考え setMultiChoiceItems でのクリックリスナーでは
  押下の結果をテンプレートの変数に保存を行うようにする。
  最終的に決定された場合にテンプレートを本来の変数に保存を行うようにする。

サンプルコード
package com.tomonobu.application.test_3;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

public class Test_program_3Activity extends Activity {
AlertDialog.Builder dialog;
String[] menu_list = new String[4];
boolean[] menu_list_selected;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
int i;

menu_list[0] = "red";
menu_list[1] = "green";
menu_list[2] = "blue";
menu_list[3] = "black";

menu_list_selected = new boolean[menu_list.length];
for (i = 0;i < menu_list.length;i ++) {
menu_list_selected[i] = false;
}

Button button = new Button(this);
button.setText("menu");
button.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
final boolean[] tmp_menu_list_selected;
tmp_menu_list_selected = menu_list_selected.clone();
dialog = new AlertDialog.Builder(Test_program_3Activity.this);
dialog.setTitle("マルチチョイス");
dialog.setMultiChoiceItems(
menu_list,
menu_list_selected,
new DialogInterface.OnMultiChoiceClickListener(){
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
tmp_menu_list_selected[which] = isChecked;
}});
dialog.setPositiveButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
int i;
menu_list_selected = tmp_menu_list_selected.clone();
String text = "";
for (i = 0;i < menu_list.length;i ++) {
if (menu_list_selected[i]) {
if (text.length() > 0) {
text += ",";
}
text += menu_list[i];
}
}
Toast.makeText(Test_program_3Activity.this, text, Toast.LENGTH_LONG).show();
}});
dialog.show();
}});
setContentView(button);
}
}


[PR]
by Tomonobu1979 | 2011-09-25 03:46 | android
通常の TextView において、
メールの本文表示のように特定の文字列をリンク文字列として表示させます。

参考資料
 「【Android】 ダイアログでリンクを有効にする方法

 ・TextViewsetAutoLinkMask を設定することで
  有効なリンクの対象を設定する。
  設定には Linkify を使用する。
   ALL
    すべてのリンク対象を有効にする
   EMAIL_ADDRESSES
    メールアドレスをリンク対象とする
   MAP_ADDRESSES
    地図に関するアドレスをリンク対象とする
   PHONE_NUMBERS
    電話番号をリンク対象とする
   WEB_URLS
    webアドレスをリンク対象とする

サンプルコード
package com.tomonobu.application.test_3;

import android.app.Activity;
import android.os.Bundle;
import android.text.util.Linkify;
import android.widget.TextView;

public class Test_program_3Activity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

TextView tv = new TextView(this);
String message = "";
message += "http://anitama.com/marunage\n";
message += "test@test.com\n";
message += "03-0000-0000\n";
tv.setAutoLinkMask(Linkify.ALL);
tv.setText(message);
setContentView(tv);
}
}


[PR]
by Tomonobu1979 | 2011-08-20 00:30 | android
以前の「AlertDialogの表示」で表示を行った AlertDialog
選択式の ChoiceDialog として使用できるようにする。

参考資料
 「Android AlertDialogを表示する

 ・AlertDialog においてラジオボタン付きのリスト表示を行うために
  クラスとして AlertDialog.Builder を使用する。
 ・ラジオボタン付きのリスト表示の設定は
  setSingleChoiceItems を使用する。
  今回は
   setSingleChoiceItems (CharSequence[] items, int checkedItem, DialogInterface.OnClickListener listener)
  を使用する。
  【引数】
   items
    表示を行うリストのアイテムを設定する
   checkedItem
    初期で選択されているアイテムを設定する
   listener
    アイテム押下でのクリックリスナーを設定する

サンプルコード
package com.tomonobu.application.test_3;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

public class Test_program_3Activity extends Activity {
private String[] items = new String[3];
private int selected = -1;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

Button button = new Button(this);
button.setText("choice test");
setContentView(button);

items[0] = "Red";
items[1] = "Green";
items[2] = "Blue";

button.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
AlertDialog.Builder dialog =
new AlertDialog.Builder(Test_program_3Activity.this);
dialog.setTitle("Test");
dialog.setSingleChoiceItems(items, selected, new DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog, int which) {
selected = which;
Toast.makeText(Test_program_3Activity.this,
items[which],
Toast.LENGTH_LONG).show();
dialog.dismiss();
}
});
dialog.show();
}
});
}
}


[PR]
by Tomonobu1979 | 2011-08-19 23:01 | android
Timerの実装」で TImer を使用したけれども、
同一スレッド上での実現ってことで Handler でワンタイムタイマを実現してみる。

参考資料
 「Androidで定期的に処理を実行する方法

 ・Handler でワンタイムタイマを実現する方法として、
  以下が使用できる。
   postDelayed
    Runnable で処理を登録して Delay を設定
   sendMessageDelayed
    Message を登録し Delay を設定して、
    実際の処理を handleMessage に実装する
   ※個人的には Runnable は客観的にどのスレッドに属しているのかわかりにくいので
    handleMessage で実装してみる

サンプルコード
package com.tomonobu.application.test_3;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.widget.TextView;
import android.widget.Toast;

public class Test_program_3Activity extends Activity {
private final static String MESSAGE = "message";

private final Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
String message = msg.getData().get(MESSAGE).toString();
Toast.makeText(Test_program_3Activity.this, message, Toast.LENGTH_LONG).show();
}
};

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

TextView tv = new TextView(this);
tv.setText("Timer Test");
setContentView(tv);

Bundle bundle = new Bundle();
Message message = new Message();
bundle.putString(MESSAGE, "Timer Test");
message.setData(bundle);
handler.sendMessageDelayed(message, 2000);
}
}


[PR]
by Tomonobu1979 | 2011-08-18 02:31 | android
一定時間経過後に起動する処理を実装しよう!
っということで TImer の実装です。

参考資料
 「Timerを使って定期実行する

 ・遅延を発生させて処理を発生させるために
  TImerクラス を使用する。
  処理の登録には schedule を使用する。
  【登録例】
   schedule(TimerTask task, long delay)
    1回限りの実行の登録
   schedule(TimerTask task, long delay, long period)
    繰り返し実行の登録
 ・schedule において登録を行う処理は TimerTask により定義を行う。
  実際の処理は run に記載する。
 ・TImer で実行される TimerTask ではUIの制御が実施できない。
  よって Handler を使用して、
  実行中の Activity に戻して実行を行う。
  データの受け渡しは HandlerhandleMessage を使用して実施する。
  実際の内容は Message に登録して受け渡しを行う。
  Message のデータ設定は Bundle を使用して設定を行う。

サンプルコード
package com.tomonobu.application.test_3;

import java.util.Timer;
import java.util.TimerTask;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.widget.TextView;
import android.widget.Toast;

public class Test_program_3Activity extends Activity {
private final static String MESSAGE = "message";

private final Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
String message = msg.getData().get(MESSAGE).toString();
Toast.makeText(Test_program_3Activity.this, message, Toast.LENGTH_LONG).show();
}
};

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

TextView tv = new TextView(this);
tv.setText("Timer Test");
setContentView(tv);

Timer timer = new Timer(false);
timer.schedule(new TimerTask() {
@Override
public void run() {
Bundle bundle = new Bundle();
Message message = new Message();
bundle.putString(MESSAGE, "Timer Test");
message.setData(bundle);
handler.sendMessage(message);
}
}, 2000);
}
}


[PR]
by Tomonobu1979 | 2011-08-17 20:23 | android
以前の「リストの選択動作」で Toast を使用したが、
今回はその Toast に関して少し詳しく書いていく。

参考資料
 「トースト(Toast)を使用するには

 ・Toastandroid.widget パッケージの Toastクラス を使用する。
 ・表示を行いたい内容を ToastクラスmakeTextを使用して生成する。
  【引数】
   context
    アクティビティのコンテキストを指定
   text
    表示を行いたい文字列を指定
   duration
    表示期間(表示する長さ)を指定する
    基本は Toast.LENGTH_LONGToast.LENGTH_SHORT を指定する。
 ・生成した Toastshow を使用して表示の開始を行う。

サンプルコード
package tomonobu.com.test.program1;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

public class Test_program_1Activity extends Activity {

protected void onCreate(Bundle icicle) {
super.onCreate(icicle);

Button button = new Button(this);
button.setText("Toast");
button.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Toast.makeText(Test_program_1Activity.this, "test view", Toast.LENGTH_LONG).show();
}
});

setContentView(button);
}
}


[PR]
by Tomonobu1979 | 2011-08-16 19:21 | android
以前の「AlertDialogの表示」で
AlertDialog の実装を行ったが、
今回は表示するテキストにより表現力を持たせるためにhtmlでの表示に対応してみる。

参考資料
 「【Android】 ダイアログでリンクを有効にする方法
 「:Tips  TextView を使いこなそう ~ 表示編 ~  その2
 「:Tips  TextView を使いこなそう ~ 表示編 ~  その3

 ・AlertDialog でhtml表示の対応を行うために
  メッセージの表示部分の ViewTextView に入れ替える。
  View の設定には setView を使用する。
 ・TextView においてhtmlタグを有効にするために、
  表示を行うhtmlコードを HtmlfromHtml を使用して、
  表示文字列を生成する。
 ・TextView においてリンク動作を有効にするために
  TextViewsetMovementMethod に対して
  LinkMovementMethodInstance を設定を行う。

サンプルコード
package tomonobu.com.test.program1;

import android.app.Activity;
import android.app.AlertDialog;
import android.os.Bundle;
import android.text.Html;
import android.text.method.LinkMovementMethod;
import android.text.method.MovementMethod;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class Test_program_1Activity extends Activity {

protected void onCreate(Bundle icicle) {
super.onCreate(icicle);

Button button = new Button(this);
button.setText("dialog");
button.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
AlertDialog.Builder dialog = new AlertDialog.Builder(v.getContext());
TextView tv = new TextView(v.getContext());
dialog.setTitle("test");
tv.setMovementMethod(LinkMovementMethod.getInstance());
tv.setText(Html.fromHtml("<a href=\"http://anitama.com/marunage/\">test</a>"));
dialog.setView(tv);
dialog.setPositiveButton("OK", null);
dialog.show();
}
});

setContentView(button);
}
}


[PR]
by Tomonobu1979 | 2011-08-16 11:05 | android
以前に「リスト表示」までは記載したが、
表示されたリストのアイテムが選択された場合の動作について記載していなかったので
今回はその部分を記載していきます。

参考資料
 「リストビュー(ListView)を使用するには

 ・クリックによるアイテムの選択については、
  ListViewsetOnItemClickListener の登録を行うことで対応を行う。
 ・登録される AdapterView.OnItemClickListener については
  onItemClick をオーバーライドすることで動作の定義を行う。
  【引数】
   parent
    動作対象となる ListView
   view
    クリックされたアイテムの View
   position
    クリックされたアイテムの ArrayAdapter 上の位置
   id
    クリックされたアイテムのID
 ・動作確認のために Toast を使用する。

サンプルコード
package com.tomonobu.application.test_3;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.Toast;

public class Test_program_3Activity extends Activity {
private final int WC = ViewGroup.LayoutParams.WRAP_CONTENT;
private final int FL = ViewGroup.LayoutParams.FILL_PARENT;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

LinearLayout linearLayout = new LinearLayout(this);
linearLayout.setOrientation(LinearLayout.HORIZONTAL);
setContentView(linearLayout);

ListView list = new ListView(this);
linearLayout.addView(list, new LinearLayout.LayoutParams(FL, WC));

ArrayAdapter adapter
= new ArrayAdapter(this, android.R.layout.simple_list_item_1);
adapter.add("red");
adapter.add("green");
adapter.add("blue");

list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView parent, View view, int position, long id) {
ListView listView = (ListView)parent;
String color = (String)listView.getItemAtPosition(position);
Toast.makeText(view.getContext(), color, Toast.LENGTH_LONG).show();
}
});
list.setAdapter(adapter);
}
}


[PR]
by Tomonobu1979 | 2011-08-15 23:54 | android
簡単なメッセージ表示のDialog対応を行うために
AlertDialog の実装を行ってみる。

参考資料
 「AlertDialogクラス
 「UIコンポーネント/AlertDialogの使い方
 「Android AlertDialogを表示する

 ・使用するクラスは AlertDialog を使用する。
 ・Dialog の設定は以下で行う。
  【設定の対象例】
   setTitle
    タイトルの設定
   setMessage
    メッセージの設定
   setPositiveButton
    ポジティブボタンの設定
 ・Dialog の表示は show を使用して表示を開始する。

サンプルコード

package tomonobu.com.test.program1;

import android.app.Activity;
import android.app.AlertDialog;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class Test_program_1Activity extends Activity {

protected void onCreate(Bundle icicle) {
super.onCreate(icicle);

Button button = new Button(this);
button.setText("dialog");
button.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
AlertDialog.Builder dialog = new AlertDialog.Builder(v.getContext());
dialog.setTitle("test");
dialog.setMessage("This application created by Tomonobu's room");
dialog.setPositiveButton("OK", null);
dialog.show();
}
});

setContentView(button);
}
}


[PR]
by Tomonobu1979 | 2011-08-15 17:47 | android
以前の「データベースの活用」において、
データの削除について
 delete を使用する
と記載したが、
もう少し詳しく記載したいと思います。

 ・delete について、削除対象のデータ指定は whereClause を使用する。
  更新対象の指定には whereClause
  where句のSQL文を記載することで指定を行う。
[PR]
by Tomonobu1979 | 2011-08-15 17:08 | android