スポンサー広告 - スポンサーサイト

--/--/-- (--) --:--

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

【Android】簡単メモ帳 - バージョン 1.1.3

2012/11/03 (土) 22:11

バージョンアップ

■変更点
1.アプリ情報を表示する機能を追加。
2.カレンダー画面にて、指定の年月のカレンダーにジャンプする機能を追加。
3.起動時にIMEをOFFにする処理を追加。

■詳細
●1について
テスト中にアプリのバージョンを確認したい場面があって、どうせなら機能として追加してしまえという事で追加しました。
人様のアプリでこういうの見た時に「カコイイ!」と思ったというのもあります。
せっかくなので今まで使った事のない機能を使用して見ました。
TextViewの文字列にリンクを付けてみましたが、結構面倒ですねぇ。
文字列中のURLやEMAILの文字列をリンク化するのはレイアウトの定義で指定可能でしたが、文字列リンクを埋め込むにはプログラムが必要でした。
そんなこんなで今回はEMAILの部分は自動でリンク化する方法で、それ以外はプログラムで行いました。
部分的に抜粋。

・表示文字列定義
<string name="top_dialog_info_email">Email omaomatak@gmail.com</string>
<string name="top_dialog_info_play">&lt;a href="https://play.google.com/store/apps/details?id=tak.tools.memo"&gt;Google Play&lt;/a&gt;</string>
<string name="top_dialog_info_hp">&lt;a href="http://takya2.blog33.fc2.com/blog-category-3.html"&gt;HP&lt;/a&gt;</string>
文字列中にHTMLが使えます。
が、XMLの書式上そのまま書けないので文字参照に置き換えて定義しています。
プログラム中で文字列として定義してしまえば簡単そうですが、
多国語対応とかしていると、外部ファイルで定義しないと辛そうです。

・レイアウト定義
<!-- email -->
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >

<TextView
android:id="@+id/dialog_info_email"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="@string/top_dialog_info_email"
android:autoLink="email" />

</LinearLayout>

<!-- Google Play -->
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >

<TextView
android:id="@+id/dialog_info_play"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="" />

</LinearLayout>

<!-- HP -->
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >

<TextView
android:id="@+id/dialog_info_hp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="" />

</LinearLayout>
注目はemailのTextViewの要素の「android:autoLink="email"」です。
この指定をしておくと「android:text」に指定した文字列中にメールアドレスの書式があると、自動でリンク化してくれます。
URLの場合は「android:autoLink="web"」になります。
「Google Play」と「HP」の「android:text」は空文字を指定しています。
これはこの後のプログラムで書き換えるからです。

・プログラム
MovementMethod mMethod = LinkMovementMethod.getInstance();

// Google play
TextView play = (TextView) dialogInfoLayout.findViewById(R.id.dialog_info_play);
String playHtml = getResources().getString(R.string.top_dialog_info_play);
CharSequence playStr = Html.fromHtml(playHtml);
play.setText(playStr);
play.setMovementMethod(mMethod);

// HP
TextView hp = (TextView) dialogInfoLayout.findViewById(R.id.dialog_info_hp);
String hpHtml = getResources().getString(R.string.top_dialog_info_hp);
CharSequence hpStr = Html.fromHtml(hpHtml);
hp.setText(hpStr);
hp.setMovementMethod(mMethod);
「CharSequence playStr = Html.fromHtml(playHtml);」で文字列中のHTMLを有効化しています。
「play.setMovementMethod(mMethod);」でクリック時のイベント処理の自動化を行っています。
後者は自動でやってくれてもいいんじゃないかなぁとか思いますが、仕方がない。
ちなみに、これをしないで実行すると、クリック時に例外が発生しました。がっくし。

●2について
コメントで要望があったので対応してみました。
長く使わないと気がつかない機能だなぁと思いました。
且つ、あって損は無いのでメニューから行えるようにしました。
DatePickerを使っていますが、日だけを使用しないのってちょっと一手間必要だったのでちょっとだけソースを。
Calendar cal = Calendar.getInstance();
int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH);
int day = cal.get(Calendar.DAY_OF_MONTH);

AlertDialog.Builder jumpDialogBuilder = new AlertDialog.Builder(this);
final DatePicker datePicker = new DatePicker(this);

// 今現在の日付を設定
datePicker.updateDate(year, month, day);

// 日は非表示
int day_id = Resources.getSystem().getIdentifier("day", "id", "android");
datePicker.findViewById(day_id).setVisibility(View.GONE);

// 以降はアイコンなりタイトルなりリスナーなりを設定して表示する。
こんな感じです。
DatePickerは年月日の設定で使われますが、日だけを使わない場合だってあるのに、なんで選択できないんですかねぇ。
ちなみに、入力項目が3つあるからと言って、番号で指定して非表示にすると、言語設定によっては日では無い部分が消えてしまいそうです。
なので、名指しで消し去るのがよさそうです。
以降の処理は「今月」に戻る処理とほぼ同じです。

●3について
tak個人で所有するスマホ「IS05」では、起動時にIMEが自動で立ち上がらないのですが、その他の機種では起動時にIMEが立ち上がる場合があるようです。
なのでちゃんと明示することにしました。
カレンダー画面とメモ入力画面のonCreateにて、
this.getWindow().setSoftInputMode(LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
を追加しました。
setContentViewの直前です。


今後の予定ですが、メモデータのバックアップとリストアを検討中です。
このアプリは権限の要求が一切ないのが良いところだと思っているので、できるだけこのままの状態で何とかできないか検討中です。
関連記事

コメントの投稿

非公開コメント

検索フォーム
RSSリンクの表示
カレンダー
05 | 2017/06 | 07
- - - - 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 -
月別アーカイブ
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。