2013/12/15

Android で 円をきりとる。

タイトル微妙。
なんて表現していいかわからないがこんな感じの円を切り取ってつくる

2013/12/05

TextView の フォントを変えると中国っぽさがでる。フォントによっては・・・。

端末のフォントが気に食わないことも多々あるかと思います。そこで TextView フォントを変えましょうということに。ただ普通のフォントがいいのでいいものないかなーと探していたら、Android SDK のなかにフォントが入ってた。ソレを使ってみます。

/path/to/sdk/platforms/android-[xx]/data/fonts/
にたくさん入ってます。
※ [xx] はバージョン番号


2013/11/30

Android で隙間なく Button を並べる。

ボーダー付きのカスタムボタンをびっちり隙間なく並べると、カッコ悪い。連続したボーダーがあるもんだからボーダーが太くなる。こんな感じ。


結論からだと。ボーダーは定義しないで、隙間開けて背景色を見せることでボーダーっぽく見せる。なんか昔のhtmlみたいだ・・・。

なんやかんやでこうなる。一番上のはボーダーありだから太い箇所がある。
縦線だけ、ヨコ線だけ、あと最初と最後の要素だけ角丸も。角丸がちょっと微妙かも・・・。内と外の radius がなかなかビッタリいかない。悩みどころ。まあ許容範囲内?


もうちょっとスマートな方法ないものかしら?

style="?android:attr/buttonBarStyle"
style="?android:attr/buttonBarButtonStyle"

あたりをちゃんと理解すればいいのかな?

とりあえず今回のサンプルプロジェクトは githunb にあげておきます。
drawable と layout の中身見ればまあそれなりに。

2013/11/15

こんな Android コードは嫌だ



うん。やだ。

2013/11/08

DialogFragment のイベントを Activity とか Fragment に伝えたい。

削除しますか?「はい/いいえ」の確認ダイアログ出して、「はい」したらもとの画面からも消えてるみたいな。ダイアログのイベントを元々の画面伝えたい。そんな感じのよくある話。

DialogFragment になにか渡したいときは Fragment の特徴である DialogFragment#setArguments() で渡さないといけない。でもリスナー渡したいときは一筋縄ではいかない。DialogFragment#setOnDoSomethingListener() なんかを生やしても大人の事情でダメ。ここでこうやってみる。

まずはなんにせよ Listener を作る。

こんな感じ。

Activity に通知する場合。


Activity にリスナーを implements するの忘れない。Dialog 側は onAttach(Activity activity) をオーバーライドする。ライフサイクルに組み込まれてるこのメソッドでは Activity が渡されるので、そのアクティビティが Listener を implements してるかチェックできる。なので DialogFragment#setArguments() で渡さなくてもいい。

こんな感じ。あとは必要なところでthis.mOnDialogButtonClickListenerのメソッド使えばいい。

Fragment に通知する場合。


DialogFragment にいつもの newInstance() を生やす。ここで引数に Fragment をとるようにして、DialogFragment#setTargetFragment() を使って Fragment を保持。必要なときに DialogFragment#getTargetFragment() から Fragment を取ってきてリスナーにキャストして使う。ちょっと回りくどい。


こんな感じでいいんじゃまいか。

2013/11/06

DialogFragment#dismiss() で NullPointerException がたまにでる。

「たまにでる」ここぽいんと。

ローディングのくるくるダイアログとか DialogFragment とかって出すことは、まあよくあると思う。そんな感じで出してたら NullPointerException でた。
こんな感じのとこ。



いやいや、null じゃなければって言ってるでしょ?どうも DialogFragment の中で何かが null っぽい(例外メッセージ忘れた)なので、こう変えた。



TAG を指定して生成、消すときも TAG 指定で取得、fragment が帰ってくるから一応 null チェックとそいつが DialogFragment かどうかを見て、dismiss() 呼び出す。これで一応 NullPointerException はなくなりました。ここらへんどうなんだろうかっていうのはある。ドキュメント見てもshow() の例は書いてるけど dismiss() の例もないものね。

追記


12-03 17:57:12.331: E/AndroidRuntime(5279): java.lang.NullPointerException
12-03 17:57:12.331: E/AndroidRuntime(5279): at android.support.v4.app.DialogFragment.dismissInternal(DialogFragment.java:184)
12-03 17:57:12.331: E/AndroidRuntime(5279): at android.support.v4.app.DialogFragment.dismiss(DialogFragment.java:155)


こんなかんじの例外でした。

2013/07/21

Android でクラスを作るときに TAG も一緒につくる。

Log.d(TAG, "hogehoge")
とか何かと物入りな TAG という代物。

クラスを作成するたびに
private static final String TAG = "hoge";
とかやっていたけど、まあめんどいし忘れるし。
うまいことできんかと思ったらテンプレート機能が Eclipse さんには備わっておる。