diadia

興味があることをやってみる。自分のメモを残しておきます。

Androidアプリ開発 CardViewについて

CardView

djangoと違って、自分でHTMLを書かないのでBootstrapも使えるわけもない。したがってandroidアプリ開発では準備されたものから選んで使っていかなければならない。CardViewなるものがあったので調べてみる。
参考:https://developer.android.com/guide/topics/ui/layout/cardview?hl=ja

他の資料:http://itnavdev.blogspot.com/2015/04/cardview.html
http://ojed.hatenablog.com/entry/2015/12/05/161013

ドキュメント通りやるとAndroidxを使用することを求められる件

CardViewを使うために、dependenciesにimplementation 'com.android.support:cardview-v7:28.0.0'を追加することをドキュメントでは指摘している

自分がgradle.buidにこれを追加したときに、migrate to Androidxをすることを勧められた。良くもわからずAndroidxに移行することに決めた。
migrate to Androidxのやり方は簡単で、Android StudioのメニューにRefacterがある。それを開くとMigrate to Androidxという項目があるのでそれを押すだけだった。これでAndroidxの移行が済んだことになると思われる。

またandroidxに移行すると、マニフェストファイルの内容が削除される事もわかった。以下のものが消えていた。

これら消えてしまったパーミッションを追加し直す必要もある。

Androidxに移行すると、ドキュメント通りにはCardViewを呼び出せない

ドキュメントによると、<android.support.v7.widget.CardViewのようにしてCardViewをレイアウトファイルに描画するらしいのだが、同じように試してもエラーでアプリケーションが落ちてしまう結果になってしまった。またAndroidxに移行してからgradle.buildのdependenciesの様子がおかしい。'com.android.support:cardview-v7:28.0.0'に赤の波下線がついてしまっているのだ。implementation 'androidx.cardview:cardview:1.0.0'に変更してSyncしたら赤の波下線を削除することに成功した。
layoutファイルでは、android.support.v7.widget.CardViewをandroidx.cardview.widget.CardViewに変更するとCardViewらしきものは描画する事ができた。
ライブラリの変換関係は以下を見ると調べられるようだ。
https://developer.android.com/jetpack/androidx/migrate/artifact-mappings

 

次の課題は表示したいオブジェクトの数に従ってどのようにcardviewを表示させる事ができるか

 

これを調べる。参考になるかも。https://teratail.com/questions/93023

これはActivity(.ktファイル)で実装すれば良い。例えばカードにしたい内容が6つあるとする。その場合forループを使ってCardViewオブジェクトを6回生成して、6回LinearLayoutなどにaddView()メソッドを実行すれば良いことがわかった。

CardViewの属性を調整する

まずバックグラウンドカラーを調整する。
https://developer.android.com/reference/androidx/cardview/widget/CardView.html?hl=ja#setCardBackgroundColor(android.content.res.ColorStateList)
これを利用すれば色を変えられる。
引数についてはColor.WHITEやColor.BLUEのようにすれば変更できることを確認した。
参考:https://kotaeta.com/59762937
https://tutorialmore.com/questions-1550546.htm

結論

var cv_obj = CardView(this)
cv_obj.setCardBackgroundColor(Color.BLUE)