2016_01_12週_子要素のstateに合わせてstyleを変える他
子要素のstateに合わせてstyleを変える
子要素にcheckboxが入っているlinearLayoutとかで、子要素のchecked
に合わせて親のlinearlayoutもstyleを変えたい時
LinearLayout CheckBox
こういう状態で、CheckBoxのchecked
の状態によってLinearLayoutのスタイルを変える
android:addStatesFromChildren="true"
これをLinearLayout
につけて、いつものselectorを設定すれば、子要素のcheckboxのchecked
を取得してきて見た目を変えることができる。便利〜。コードがすっきりする〜
WebViewClient#shouldOverrideUrlLoadingとは何者
onPageStarted
の前に呼ばれる
url見てwebView内の挙動にしたくない時などに使える
※今回は外部サイトなので、外部ブラウザに飛ばす時に使用
resourceでstring-arrayを持つ
<string-array name="url_patterns"> <item>hoge.jp</item> <item>hoge.hoge.jp</item> <item>hoge.fuga.net</item> </string-array>
呼び方は
context.getResources().getStringArray(R.array.url_patterns);
簡単。
OkHttp3リリースについて
TextViewのデフォルトカラー
コードから文字色を変える時
hogeView.setTextColor(R.color.res);
という風にはかけない
webViewのreload
postで送られた画面などはreload()
では機能しない。
loadUrl()
を用いてreloadを実装する
引数の中身を変える
@Override public void showHoge(String url) { if (TextUtils.isEmpty(url)) { url = getResources().getString(R.string.webview_http); } ・ ・ ・ }
基本渡ってきた引数を使うけど、空だったらとかイレギュラーな値だったら特定のものを入れたい、とか 新しく変数つくらなきゃいけないと思ってたけどこれでいいんだ、知らなかった…
暗黙的インテントでActivityNotFoundException
外部アプリにインテント投げるときに、該当のアプリがない場合はActivityNotFoundException
が起きる
return を||で返す選択肢
return hogePresnter.shouldOverrideUrlLoading(url)|| super.shouldOverrideUrlLoading(view, url);
2016_01_05週_Parcelable内のwriteとreadの順番他
毎日メモはしてるので土日にまとめて公開することにします。 一週間経つだけでも全然忘れてしまうな…。ブログに公開することで、自分が目に通す回数を増やしたりできればいいな。 良い復習にはなりそう。
JVMとJREの違い
聞かれてわからなかった・・・
http://www.mltlab.com/wp/archives/406www.mltlab.com
Dalvikとは
http://www.wdic.org/w/TECH/Dalvikwww.wdic.org
WebViewのonReceivedErrorが呼ばれない
API 23ではonReceivedError
の仕様が変わったそう。
でも新しいonReceivedError
だとネットワークエラー時に呼ばれない。
complieSdkVersionを23にすると非推奨の打ち消し線が入るのでなんでこうなっているのかわからなかった
何が原因なんだろうか、なにかのverな気がする…
結局compileSdkVersionを22に下げても、6.0端末で試してもこの新しいonReceivedError
は呼ばれなかった
LinearLayoutでparentBottomを表現する
http://ichitcltk.hustle.ne.jp/gudon2/index.php?pageType=file&id=Android055_layout4ichitcltk.hustle.ne.jp
特定のコミットからブランチを切る
デフォルトのDialogを使うのがよくない理由
getFragmentManagerとgetSupportFragmentManager
getSupportFragmentManager().executePendingTransactions(); if (getSupportFragmentManager().findFragmentByTag(DatePickerDialogFragment.TAG) != null) { return; } DatePickerDialogFragment.newInstance().show(getSupportFragmentManager(), DatePickerDialogFragment.TAG);
ダイアログの二重起動での制御について、
findFragmentByTag()
がいつもnullで帰ってきてしまう問題。
今回はsupportのDialogFragmentを使ってるので、FragmentManagerを呼ぶ時はサポートの方で呼ばなくては返ってくるFragmentManagerが異なる。
getFragmentManager()
もgetSupportFragmentManager()
も呼べるため、なぜ合っていないのか気づきにくかった.
supportlibraryを使ってるのかそうでないのかみたいなところが意外と時間を食われる元な経験が最近多い…
久しぶりにgitでミスった
最近revertとかresetなど多用していてdiffがすごいことになった死にたい
masterとheadのdiffを一覧で見る
git diff master..head --stat
一度pushした後にローカルでresetしたりするとnon-fast-forward
で怒られる
git push origin :hoge
で空をremoteのhoge
ブランチにプッシュすることになるので、リモートのブランチが消える
git push origin hoge
でもう一度pushすればいい
特定のファイルだけmergeする
文字列のちょっと凝った操作
意外とよく使うけどすぐ忘れちゃう
http://y-anz-m.blogspot.jp/2011/03/android-xml.htmly-anz-m.blogspot.jp
どのタイミングで状態が変わるのかコメントに付け足しておく
void hoge(){ if(mDisable){ return } mDisable = true; ・ ・ ・
のようなインスタンスフィールドのboolean値などはなるべくインスタンスフィールドに持たない方がよいと言われてるくらいだから、 どの状態で変わるのかはコメントしておいたほうがあとで見た人(自分も含む)が理解しやすそう。
今回は親のクラスで使われている変数だったため、なおさら。
license情報
- リリース用のものだけでOK(リリース用apkに含まれるもののみ)
- テスト用・デバッグ時にしか使ってないもの(loggingのものなど)は表示しなくてよい
AndroidManifest Activityの設定
http://docs.monaca.mobi/cur/ja/reference/reference/config/android_configuration/#manifest-xmldocs.monaca.mobi
自動でlabelがついてくるけど、特になくてもよさそう。ある場合は、lancherの時アプリ名として表示される。 なかったらデフォルトのものが表示される。
Acitivityのデフォルトに入っている値を利用する
知らなかったけど結構、元々用意されているものが多い。自分で定数設定しなくて済むので、いろいろ書き留めておきたい。
ActivityのRESULT_OK ex)Activity.RESULT_OK
MVP設計におけるDtoを持つ場所
Activityにインナークラスで次画面に渡すためのインナークラスを持っていたところ、インターフェースに持つよう指摘された
理由としては、Activity / Fragment に関係なく、View に固有する dto であれば、View のインターフェースの定義するのが望ましいからです。
どこに依存している情報なのか?を考える。
strings内のCDATA内でのエラー
ライセンスページを作ってる際にエラーが出た
インターフェース内の省略範囲
- インターフェース内に定義した内部クラスに
public static
は省略できる - コンパイルすると自動的に付与してくれる
Parcelable内のwriteとreadの順番
@Override public void writeToParcel(Parcel dest, int flags) { dest.writeInt(mUrl); dest.writeInt(mTitle); } public ParamDto() { } protected ParamDto(Parcel in) { mUrl = in.readInt(); mTitle = in.readInt(); }
このwriteとreadの順番が逆になっていると変数に入ってくる情報が変わってくる
Linearlayout内にdivider
真ん中だけ動的に区切り線をいれたいが、linearlayoutにviewをaddviewをしても、反映されなかった
dividerというものを設定できるみたいなので、これ便利
./gradlew app depencies
で依存しているライブラリを表示する gradleコマンド
ビルドが通らないソースをコミットしない
当たり前だけど、タイポミスがあったままコミットしてしまった。
javadocのtips
こんなのもある blogs.oracle.com
inflateの引数
inflate()の第三引数の話。
第三引数のboolean attachToRoot
の値は、falseにしないと第二引数に渡した親viewが返り値として返ってくる。
http://developer.android.com/intl/ja/reference/android/view/LayoutInflater.html#inflate(org.xmlpull.v1.XmlPullParser, android.view.ViewGroup, boolean)developer.android.com
scrollView内のlinearLayout
scrollViewもその中のlinearlayoutいずれもwrap_content
が推奨されている
実際にscrollView内のlinearLayoutにmatchをつけてもmatchにならない
<style name="TaskDetailButton" parent="@style/Widget.AppCompat.Button.Borderless">
2016_01_04_CursorIndexOutOfBoundsException他
新年。引き続き学んだことの記録を。新年の抱負など冬休みの記録は改めて。
SDK更新後のAndroid studioのエラー
sdk更新したりしてたらエラー出まくって心臓に悪かった。
logcatでエラー
http://www.hangout.co.jp/blog/archives/148www.hangout.co.jp
こんなのが出まくる
dalvikvm﹕ VFY: unable to find class referenced in signature (Landroid/webkit/WebResourceRequest;)
http://theoldmanandthedroid.blogspot.jp/2013/06/fixbug-vfy-unable-to-find-class.htmltheoldmanandthedroid.blogspot.jp
SDK更新するとなったりするみたい。rebuild projectでひとまずはdalvikvm
はいなくなった
リモートのコミットを取り消したい
CursorIndexOutOfBoundsException
わかりやすかった。Cursorの性質みたいなのを知ってなきゃいけなかったのかな
Parcelableの話
http://y-anz-m.blogspot.jp/2010/03/androidparcelable.htmly-anz-m.blogspot.jp
AndroidでBorderBottomをつける
いつも忘れてしまう…
http://wada811.blogspot.com/2013/07/android-view-border-bottom.htmlwada811.blogspot.com
GradleのBuildが遅い!
Android Studio の ビルド がやけにトロいandroid.benigumo.com
checkboxやradiobuttonのcheck部分を隠す
android:button="@null"
checkboxのcheckのデフォルトのstyleをリセットする。
buttonのデフォルトのstyleをリセットするにはbackground="@null"
scrollViewの下にfooterを置く
画面下部に固定配置muchag.undo.jp
layout_weight=1
をscrollViewに追加すると解決する、なんでや…
2015_12_25AndroidのwebViewでオレオレ証明書に対処する他
毎日会社で新しく学んだこと・調べたことをメモベースで公開することにしました! なんとなく知識が蓄積していないかを可視化するためにも。
build.gradle内のbuildTypesにタスクを作成する
vividcode.hatenablog.com not fount buildConfig()とか言われたけどな
android webViewの設定
javascriptの設定など
http://y-anz-m.blogspot.jp/2010/07/androidwebview.htmly-anz-m.blogspot.jp
オレオレ証明書の対処法・仕組み
http://y-anz-m.blogspot.jp/2012/08/androidwebview-https.htmly-anz-m.blogspot.jp
開発用のwebViewを表示するためにこういう対処が必要になりました。 この対処法にいきつくまでに、SSLの知識?とか開発用のサーバーがどんな構造になっているかを問題を切り分けて考えることが必要でした。 (つまり時間かかった〜涙)
2015_12_24onDestroyで参照を切るもの他
最近続けている今日学んだことのメモ(調べたこととか、調べて参考にした記事)を公開していきます。 Androidメイン。
onDestroyで参照を切らなきゃいけないもの
- ポイントは"Activity"への参照が残らないようにするという視点
- なんでも切れば良いワケじゃないね
Utilクラスに移譲するもの
- 経験則だが、versionNameを取得するものなどは、Utilクラスに移動することを検討したほうがいい
@Nullableについて
- 何らかの原因で返り値が null になるケースがあるときは、メソッドに@Nullable アノテーションを付けておく。(例えばtry/catch が必要になっているとか)
- 何故つけるかというと、もし他の人がこの画面に追加実装することになった場合でも、null が返されるケースがあることを明示的に書いておけば、実装者はそれに気をつけて実装が可能なので、バグ・不具合の発生を抑えれる。
nullが入り得るかどうかでバグにどれだけ繋がるか、その情報をどう伝えるかについて
nullは型を持つかどうかの話(というよりoptionalやmaybe?(使ったことない)の話) bleis-tift.hatenablog.com
TargetSDKversionの話
minSdkVersionとTargetSdkVersionの関係
何も考えずに実装していたなぁと実感。 最近出たAPIは確認しておくべきなのかもしれない。
ちなみに今のプロジェクトはminSdkVersion=16
,targetSdkVersion=22
となっていた
じゃあcompileSdkVersionは? http://assam-at-night.blogspot.jp/2015/05/androidcompilesdkversionbuildtoolsversi.htmlassam-at-night.blogspot.jp
一方compileSdkVersionにはcompileSdkVersion=23
になっていたので、targetとcompileがバージョン違うと何がいけないのかな?
Argumentsとは
bundleにsetArguments()
するときのキーの値の名前の流れでARGS_HOGE
という名前にした方がいいよと指摘を受けて、あれ、argumentsってなんだっけとなった。引数やんけ
その流れで引数とパラメータの違いを説明している記事があったのでメモ。
Support Libraryについて
minSdkVersionとかTargetSdkやらはわかったけど結局supportLibraryって何が違うんだっけ?となったので改めて。
2015_12_22AndroidのversionNameを取得する他
Fragmentでsetterを使わない理由
DialogFragmentを実装したため、復習。 わかっているようで、わかっていないような…。ココらへんの話定期的に復習したい。
http://y-anz-m.blogspot.jp/2012/04/androidfragment-setarguments.htmly-anz-m.blogspot.jp
Materialデザインの要素名
上に載ってるコンポーネントのことをなんて名前つけたらいいのかなと
OutOfMemory対策
onDestroyで参照切るお話。 結局何を切るべきで何は切らなくてもよいのか?みたいなところを見ていた
http://htomiyama.blogspot.jp/2012/08/androidoutofmemoryerror.htmlhtomiyama.blogspot.jp
ButterKnifeのunbind
上と関連してFragmentの場合は、onDestroyView()
でunbindしようと書いてある。
ソースレビューで指摘されたため何が必要で何が必要じゃないか気になった。
たまに@InjectView
が使われているソースコード見つけて!?となることがあったのでありがたい記事。
AndroidのversionNameを取得する
PackageManager manager = ((Context) mAboutThisAppsView).getPackageManager(); PackageInfo packageInfo = manager.getPackageInfo( ((Context) mAboutThisAppsView).getPackageName(), 0); mAboutThisAppsView.initViews(packageInfo.versionName);
AndroidManifestに書いてあるversionNameを取ってくると書いてあったが、 実際にはapp/build.gradleに記述してあるversionNameをとってきているみたい
defaultConfig { applicationId "jp.co.hoge.hogeproject" minSdkVersion 14 targetSdkVersion 23 versionCode 1 versionName "1.0.0" }
同じファイルの中でcommitを分けたいとき
git add -p
を使うとよい。
自分はtigでaddを管理しているので、オプションがあればもっとコミットログが綺麗になりそう!
結局Contextとは
http://individualmemo.blog104.fc2.com/blog-entry-41.htmlindividualmemo.blog104.fc2.com
毎回わかった気になって毎回わかってなかったてなってる気がする
アプリ全体の情報を統括してる
というイメージ。わかるけど使いこないしてるかわからん
androidではシステムが元々結構resource用意してくれてる
http://developer.android.com/intl/ja/reference/android/R.string.htmldeveloper.android.com
ok
cancel
などよく使うものはある。
Dialogの二重起動をどう防ぐか
こういったメソッドが参考になるみたいな fragmentManagerのexecuteを忘れててずっとnullがかえってくるからどうしようかとおもった
ここのをコピペしてきたっぽいものを吟味せずに使ってて指摘された。
http://eggdev.mobaegg.com/2012/08/blog-post_4.htmleggdev.mobaegg.com
2015_12_21Javaのオーバーロード他
毎日情報量が多くて蓄積していない感覚を感じているので何かアウトプットを、と思っているものの、毎日記事を書こうとすると後回しになってしまうので、 毎日参考に見た記事を頭にいれたいものベースでピックアップして載せてみる。 いつまで続くか知らないけど。
Gradleで認証エラー
Error:(1, 0) Cause: unable to find valid certification path to requested target
→結局社内でアクセスしていたbuild設定ファイルのしわざでした。ビビる。
ローカルとリモートのブランチ名を変更する
URLの管理はURIで
こんなかんじでUri.parseで初期化・定数化しているみたいだった
暗黙的インテント
http://mitoroid.com/category/android/android_implicit_intent.phpmitoroid.com
- 他のアプリの機能を使ってデータを開く
- 今回はデータの表示をURLを渡した
- これはブラウザが開くことになる
Drawableで角丸縁ボタン
strokeとsolid、考えたらわかるんだけど久しぶりにどうするんだっけ、とまた調べてしまった…
Javaのオーバーロード
返り値の型だけが違うだけだとコンパイルエラーになってしまう。
vim
ctl+[
でエスケープするの癖つけよう
コマンドライン
ctl+j
でエンターと同じctl+a
で先頭に戻るctl+f
で進むctl+b
で戻る
javadocについて
javadocも奥が深い。文字だけ書いてるだけじゃなくて色々使いこなせるようになりたい限り…。
<code></code>
を使って書くだけでもわかりやすさなど変わりそう…
Androidのguidesやら
- github.com 英語よめねぇ・・・
- github.com 英語よめねぇ・・・
何か形になればよいな〜日記的な感じでもよいし。ということで初日終了。