ioschedのToolbar周りを見てみた
iosched 2018が公開されましたね!知見たっぷり🎉
Tooblar`周りをどうしようか悩んでいたので抜粋。
BottomNavigationViewを使ったときのあれ。
ioschedではActivity
でToolbar
を持つ形ではないようでした。個人的に先入観もありビックリ。
結論から言うと、Fragment
でAppBarLayout
を持たせる感じでした。
スケジュールタブの場合は
<AppBarLayout> <FrameLayout app:layout_scrollFlags="scroll|snap|exitUntilCollapsed"> <ImageView android:layout_gravity="center_vertical|start"/> <TextView android:textAppearance="@style/TextAppearance.IOSched.ToolbarTitle"/> </FrameLayout> <TabLayout/> </AppBarLayout>
といった具合です。ガッツリImageView
もTextView
も位置指定してました。
ちょっと気になってToolbar
のUseageを探してみたところ、ファイルとしてはtoolbar.xmlはあるものの
これどこも使ってないように見受けられます(違ったら教えてほしい!)
UpNavigationが気になる。
ここで気になるのがスケジュール等の詳細のUpNavigation周りになってきます。
Toolbar
ではなく普通にImageView
でした。わお。
<ImageButton android:id="@+id/up" android:layout_width="?actionBarSize" android:layout_height="?actionBarSize" android:layout_gravity="start|top" android:background="?selectableItemBackgroundBorderless" android:contentDescription="@string/navigate_up" app:srcCompat="@drawable/ic_arrow_back" />
こんな具合です。知らなかった。。
スクロールに応じて見えなくなったりもしていたのでてっきりToolbar
かと思ってました。
この挙動についてはPushUpScrollListenerで定義されているようです。
感想
Material studiesを見ていると、Toolbar
周りの自由度がグッと上がった気がしていて
勝手にToolbar
を拡張と考えていましたが、結構筋肉で実装していく感じになるのかな?
KotlinのSealedクラス使いたくて無理をした
Kotlinのsealed class
を使いたいと虎視眈々だったんだけど
ついに突っ込んでみた。今回の用途ではそんなにメリットはないけど。
よくある成功or失敗を柔軟にという感じはなくemun
の拡張くらいの気持ち。
使ったとこ
Firebase AnalyticsでUser Propertyを設定したかったんだけど、enumで
enum class UserProperty( val propertyName: String, val value: String ) { AREA_KYUSYU("area", "九州), AREA_SHIKOKU("area", "四国), ... }
とするのは毎回area
って書かなきゃなのがかっこ悪いなと。
おっ、と思ってsealed class
使って見ると
sealed class UserProperty( val name: String, open val value: String ) { abstract class Area(override val value: String) : UserProperty("area", value) object Kyushu : Area("male") object Shikoku : Area("female") ... }
って書けた。コレジャナイ感は否めないけど、こっちのほうが好みなので良しとしよう。
まとめ
もっと活用していこう。あとブログちゃんと書くぞ!(n回目)
KotlinでGsonでStringをBooleanにする
やったこと
AndroidでRetrofit + Gsonを使っているときのおはなし。
APIレスポンスにStringで"0"、"1"が返ってくる場面に出くわして
これをBooleanとして扱いたくってTypeAdapter
を使ったよ。
なにが起きたか
{ "is_success": "1" }
みたいなやつをBooleanで扱うぞと思って
data class Response( @SerializedName("is_success") val isSuccess: Boolean )
というふうにしてたら全部true
になった。全てが正になった困った。
どうやったか
パッと思いついたのはコンバータクラス作って
// レスポンスはStringで受ける // data class Response( // @SerializedName("is_success") // val isSuccess: String // ) object ResponseConverter { fun convert(res: Response) = Item(isSuccess = res.isSuccess == "1") } fun Response.convert() = ResponseConverter.convert(this)
みたいにするのだけど、毎回するのアレだよな〜と思って調べたら
TypeAdapter
なるものを知った。詳しくは説明しないけど便利。
ということで
class IntToBooleanTypeAdapter : TypeAdapter<Boolean>() { override fun write(out: JsonWriter, value: Boolean?) { if (value == null) { out.nullValue() return } out.value(if (value) 1 else 0) } override fun read(`in`: JsonReader): Boolean { if (`in`.peek() == null) return false return `in`.nextInt() == 1 } }
というふうにしてあげて、レスポンスを
data class Response( @SerializedName("is_success") @JsonAdapter(IntToBooleanTypeAdapter::class) val isSuccess: Boolean )
のようにしてあげることで、無事変換された!!
おわりに
Gsonがどのようにうまいこと変換してくれるかまで
調べるのに手が回ってないので時間ができたら調べる。
Gsonなのか、Kotlinの型の問題なのかわすれちゃった。。
Javaのときはできてたような…できてなかったような…
調べたら追記するかも。明日はDroidKaigi。
使わないパラメータでWarningを出さない for Kotlin
Androidの話。
MVVMアーキテクチャで開発をしていると、ViewModelにクリックメソッドを実装する事が多い。
その際、
fun onClickHoge(view: View) { someThing() }
のように定義するんだけど、このview
というパラメータはそこまで使わない。
使わないパラメータで警告を出さないようにしようと
fun onClickHoge(@SuppressWarnings("unused") view: View) { someThing() }
としてたんだけど、これでは警告が抑えられていなかった。
調べてみると、これはJava
の書き方のようで、Kotlinだと@Suppress
を使うらしい。
そこで、
fun onClickHoge(@Suppress("unused") view: View) { someThing() }
としたんだけど、これでも警告が抑えられていなかった。
調べてみると、unused
じゃなくてUNUSED_PARAMETER
を使うらしい。
そこで、
fun onClickHoge(@Suppress("UNUSED_PARAMETER") view: View) { someThing() }
とすると、警告が抑えられた!🙌
conclusion
困ったらalt
+ Enter
だ 🙏
DroidKaigi conference-app-2018にコントリビュートした
このブログをはじめるきっかけにもなったDroidKaigi 2017。
一番最初のブログで、こんなことを言ってた。
来年もまたあったら絶対にコントリビュートする!と心の中で誓う私。
DroidKaigi 2017 is awesoooome!!! - イニシャルがリムーブ
コントリビュートした💪
有言実行。簡単なissueを拾ってコントリビュートさせて頂いた。
github.com
このissueをこう。
github.com
やったぜ!
すごい :+1: の飛び交う雰囲気でとてもあたたかくて
PR出すまで緊張してたけどとっても嬉しかった!
もういっちょ
あとは見ていてコードでの知見もだがUI的にも参考になる。
ぜひとも見て触って欲しいと思う。集合知である。
触ってたら
DroidKaigiアプリ学びしかないと見てたら挙動がちょっと変なとこあったのでもういっちょPR出してみたぞ(行を入れ替えただけ)
— アルまきやま (@_rmakiyama) 2018年1月15日
なんて事もあって1行入れ替えのPRを出したら
爆速でマージしていただいてさらに良い経験になった!
英語が本当にひどいので頑張ろうと思った。
けど、こんな英語でも怒られることはない!(?)
やってみて所感
今回のコントリビュートで、OSSに関わるって
楽しいし夢があるし学びしかないと身を持って感じれたのが
1番の収穫だったと思う!機会があれば狙っていきたい!
今がチャンス
easyタグのissueが増えた今がチャンス!
ぜひこの体験をあなたも!あなたも!
P.S.
2週間に1記事が聞いて呆れるけど、気にせず続けていきます🙌