2012年5月8日火曜日

AlertDialogの使い方(基本)



■AlertDialog

AlertDialogは、コンストラクタがprivateになっており 直接 new 出来ないので注意!
AlertDialog.Builder経由で、new してやる必要がある

●通常のダイアログ表示
// ダイアログの表示
AlertDialog.Builder dlg = new AlertDialog.Builder(this);
dlg.setTitle("TEST");
dlg.setMessage("Hello, World!");
dlg.show();

●選択ダイアログの表示
AlertDialog.Builder dlg = new AlertDialog.Builder(this);
dlg.setIcon(R.drawable.icon);
dlg.setTitle("Select Dialog");
dlg.setMessage("選択してください");
dlg.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int whichButton) {
        /* YES 選択時の処理 */
    }
});
dlg.setNegativeButton("No", new DialogInterface.OnClickListener() {
   public void onClick(DialogInterface dialog, int whichButton) {
       /* NO 選択時の処理 */
   }
});
dlg.show();

他にも、リストや複数の選択肢、プログレスバーなどを扱うことができる

■参考アドレス
http://www.hakkaku.net/articles/20090924-581
http://wikiwiki.jp/android/?UI%A

2012年5月7日月曜日

android ファイル操作の種類



通常のファイル格納領域
アクセス許可さえあれば、javaのファイルアクセスAPIを用いてアクセス可能
例)Fileクラスのdelete()など

※注 sdcard へのアクセスはマニフェストにパーミッションの追記が必要
(パスは、/sdcard, /mnt/sdcard/など。端末依存?)
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
★sdcardだけでなく、内蔵diskへのアクセスも↑が必要だった★

■アプリケーション配下のファイル格納領域
android側で独自に定義されたAPIを用いる
openFileOutput(ファイル名, モード)/openFileInput(ファイル名)/deleteFile(ファイル名)

・「data」デレクトリ
/data/data/パッケージ名/files
アプリケーション専用のデータ領域
/data/data/パッケージ名/database
データベース
/data/data/パッケージ名/shared_pref
Preferenceを格納

・「assets」デレクトリ
読み込み専用
assetsディレクトリを作成して保管したファイルを読み込む事が可能
ResourcesクラスのopenRawResource(R.raw.ファイル名)や
例)AssetManager.oepn(ファイル名)など

・「raw」デレクトリ
読み込み専用
リソースIDを指定してのファイル読み込みが可能
例)getString(リソースID)や、ResourcesクラスのgetString(リソースID)など

■参考

2012年3月19日月曜日

Notificationのフラグによる動作の設定


Notificationクラスのflagフィールドに代入することで、下記設定が可能
フラグは OR で代入して、複数設定することも出来る。

Notification.FLAG_AUTO_CANCEL
 しばらくすると自動的に通知が消える。ポップアップでお知らせするために使える

Notification.FLAG_INSISTENT
 通知ウィンドウを開くか、キャンセルされるまで、音が鳴り続ける。かなりうざそう

Notification.FLAG_ONGOING_EVENT
 通常の通知ウィンドウの上位のバーの部分に表示する。常に常駐するアプリに使える。

Notification.FLAG_NO_CLEAR
 通知をクリアを押してもクリアできないようにする FLAG_ACTIVITY_NEW_TASK ?

2012年2月20日月曜日

Preferenceの使い方 2

preferences.xmlを使わずに直接書き込みを行う方法

 
     SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(this);
     Editor e = pref.edit();
     e.putString("ip", "保存するテキスト");
     e.putString("path",  "保存するテキスト" );
     e.commit();
こんな感じ。

2012年2月9日木曜日

PendingIntent

RemoteViewやNotificationクラスに用いるPendingIntentというもの
よく理解出来ていないため少し整理してみます。

これはタイミングを指定して発行することができるIntentのようです。
new したIntentを、直ちに発行するのではなく、ボタンを押されたタイミングで発行する等に
利用するようです。
引数でIntentのインスタンスを受けとって包むので、Wrapper的な役割ですかね。

PendingIntentは、以下のstatic メソッドから取得できる
どこに対して発行するかによって、作り方が違う

getActivity(Context, int, Intent, int)
→Activityへ投げる
getBroadcast(Context, int, Intent, int)
→ブロードキャストへ投げる
getService(Context, int, Intent, int);
→Serviceへ投げる

例えば、Notificationに使う場合は、
通知バーをタップしたタイミングでIntentが発行されるという感じのようです。

PendingIntent自身はOSが管理しているものなので
PendingIntentを起動した元のActivityが死んでも、それはOSによって残り続け
通知バーをタップしたタイミングで、Intentが投げられ、
元のAcitivyが起動されるという感じのようです(自信なし)

■参考にさせて頂いたサイト:
http://y-anz-m.blogspot.com/2011/07/androidappwidget-pendingintent-putextra.html

2012年2月6日月曜日

ProgressBarの使い方


プログレスバー(進捗)の表示には、ProgressBarウィジェットを用いる。

スタイルの指定(XMLレイアウト)
android:progressBarStyle        通常の円
android:progressBarStyleHorizontal   水平方向のバー
android:progressBarStyleLarge      大きい円
android:progressBarStyleSmall      小さい円

StyleHorizontal 使用時に限り、進捗状況の表示が可能になる。

メソッド:
setMax() プログレスバーの最大値の指定。上限はint型の範囲。
setProgress() 現在の進捗の値を設定(濃い色で表示される)
setSecondaryProgress() セカンダリの値の指定(薄い色で表示される)

使用例)
ProgressBar progress = (ProgressBar) findViewById(プログレスバーWidgetのID);
progress.setMax(100);
progress.setProgress(20);
progress.setSecondaryProgress(70);

2012年1月31日火曜日

RemoteViewsの使い方

別プロセス上で表示可能となる階層的なViewを記述するクラス
Viewは、レイアウトリソースファイルを指定してインフレートする。

// 生成
RemoteViews view = new RemoteViews(パッケージ名, レイアウトID)

// 以下の用に、指定したVIEWに対してリソースをセットする
view.setImageViewResource(VIEW_ID, リソースID);
view.setTextViewText(VIEW_ID, "text data");
view.setProgressBar(VIEW_ID, 100, progress, false);

// またPendingIntentをセットして、ViewからIntent発行をしたり出来るらしい★未検証
.setOnClickPendingIntent(VIEW_ID, pendingIntent);

このRemoteViews を用いて、Notificationクラスの、contentViewにセットすることで
独自のレイアウトをNotificationに表示させることが出来るようです。