『Welcome to Android Basics in Kotlin』をやった(2)

Layouts

Kotlinのクラスと継承

2. クラス階層とは

一応、"豆類"のところのリンクがhttps://en.wikipedia.org/wiki/Legumeだから分かるけど
Legume(マメ科植物)って注釈を入れてくれないとAnimalクラスを例にしたパターンよりも分かりづらいなw

Lentilレンズ豆Chickpeaひよこ豆もわかんねw 世界共通でわかりやすい例を上げるべきだなw

3. 基本クラスを作成する

Dwelling 住居

5. 階層内のクラスを変更する

床面積を計算する

open class RoundHut(
   val residents: Int,
   val radius: Double) : Dwelling(residents) {

突然 residentsにvalをつけてるが何か意味あんのかな? ←※ これ、何の話をしてるのか自分で思考を遡れない(ノ∀`)


Android用のXMLレイアウトを作成する

3. XMLを読んで理解する

xmlnsはXML名前空間を表し、各行はスキーマ(これらの単語に関連する属性の語彙)を定義しています。たとえば、android:名前空間は、Android システムによって定義されている属性を示します。レイアウトXMLのすべての属性が、それらの名前空間のいずれかで始まります。

何言ってるかよくわからない(´・ω・`)
xmlnsってなんだっけ…

xml名前空間name spaceか。
ああ、後に続く単語が所属する属性ということか。
よりわかりやすく言えば、あるプログラム内に同じ名前を持つ要素が複数存在した場合に発生する名前衝突を避ける為の一意的接頭辞としてのURIを名前空間として指定してるって感じか。

xmlnsで指定する名前空間名、android,app,toolsは通例的やコーディングルール的なものでシステム的に指定されているわけではないのかな?
#32 AndroidのXMLのxmlnsとは?
URL と URI の違い
なぜこの行xmlns:Android = "http://schemas.Android.com/apk/res/Android"がレイアウトxmlファイルの最初でなければならないのですか?

厳密に言うと違うけれども、Javaで行っているimportを最上位のコンテナで宣言してるみたいなもんだな。

android属性の値は監視されているのか、変更すると

In Gradle projects, always use http://schemas.android.com/apk/res-auto for custom attributes

Unexpected namespace URI bound to the "android" prefix, was http://schemas.android.com/apk/res/and, expected http://schemas.android.com/apk/res/android

みたいなエラーが出る。

app属性のhttp://schemas.android.com/apk/res-autoを変更するとエラーにはならないが、app属性で指定してるものは動かないのでconstraint等が機能せずに、期待した表示にはならないのか。真っ白しろすけやで(・∀・)

tools属性は

Android Studio では tools 名前空間でさまざまな XML 属性がサポートされており、これを使用して設計時の機能(フラグメントに表示するレイアウトの選択など)やコンパイル時の動作(XML リソースに適用する圧縮モードの選択など)を有効にできます。これらの XML 属性はアプリのビルド時にビルドツールによって削除されるため、APK のサイズと実行時の動作には影響しません。

ということでまさにツール的な感じ…

この辺はAndroid StudioというかGradleの方で決められてるURIってことなのかな?
変更できたりするんだろうな、そうでなかったらデフォルト値として書かせる必要はないもんな。でもなんでマニフェストファイルのルートかなんかでその宣言をしたら、下位と言えるそのアプリ内のレイアウトファイル等で宣言せずに使えるようにしてないんだろうか? レイアウトファイルの独立性というか他アプリへの流用の為?

なんでConstraintLayoutの時に"android:layout_width"に
"parent"を指定したら、内部で自動で0dp、
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
にするみたいにしなかったんだろう?


チップを計算する

4. チップを計算する

チップを計算して、その端数を切り上げる

"For a `Switch` element, you can check the `isChecked` attribute to see if the switch is "on"."
の部分がコードみたいに表示されてるのはなぜなんだぜ(´・ω・`)?

ceil()

8. 概要

Null は「値なし」を意味します。
null の値を処理できないコードもあるため、使用するときは注意してください。
大文字と小文字の違いはなんだっけ(´・ω・`)?
ただの記述ミス?


アプリアイコンを変更する

1. 準備

ランチャーとは、Android デバイスでホームボタンを押してアプリの表示と整理を行う場合や、ウィジェットとショートカットを追加する場合などのエクスペリエンスのことです。

何言ってっるっか、わがんね(´・ω・`)

6. アプリアイコンを変更する

"3.Android Studio の Image Asset Studio ツールが開きます。"の後の
4.5.6.のインテントというかデプスが間違ってて、数字がおかしくなってる?

ベクター型ドローアブル ファイルを-v26ディレクトリに移動する

"Source set: main(デフォルト値をそのまま残します)"
なんか"Source set"の欄がなかった。選択が違うと表示される?

"4.ic_launcher_background.xml ファイルを左クリックして、[drawable-v24] フォルダから [drawable-anydpi-v26] フォルダにドラッグします。"
作業をミスったのか、[drawable-v24]じゃなくて[drawable]フォルダ内におったわ


より洗練されたユーザー エクスペリエンスを作成する

3. マテリアル コンポーネント

テキスト フィールド

まだ EditText を削除していないため、次の属性を EditText から切り取って貼り付け、TextInputLayout に配置します: 制約、リソース ID(cost_of_service)、レイアウトの幅(160dp)、レイアウトの高さ(wrap_content)、チップのテキスト(@string/cost_of_service)。

制約って言う書き方だと見落とすな。長いから省略したんだろうけれども。
つーか意味を掴みづらいと思う。"layout_constraint~"とか各constraintとか制約(constraint)と表記した方がいいな。

5 TextInputEditText.cost_of_service_edit_text.の"."が余計。

スイッチのところでも"."が余計

com.google.android.material.switchmaterial.SwitchMaterial.

5. スタイルとテーマ

android:minHeight,android:gravity,および android:textAppearance.に","と"."が余計。

スタイルをテーマに追加する

View.に"."が余計。

daytimeとnightモード用のxml内の構成要素を意図的に変更していない場合、themes.xmlに追加したら、nightモード用のxmlがある場合は自動的にnightの方にも追加されてもいいような気がしないでもない。daytime用xmlとそのnight差分と言う形でnight用xmlを自動生成するような。

6. ユーザーエクスペリエンスの向上

Enter キーでキーボードを非表示にする

下記のヘルパーメソッドをコピーしてMainActivity クラスに貼り付けます。MainActivity クラスの右中かっこの直前に挿入できます。

めっちゃわかりにくいw

下記のヘルパーメソッドをコピーしてMainActivityクラスの末尾に貼り付けます。

くらいでいいんじゃないかな。

binding.costOfServiceEditText.
binding.calculateButton.setOnClickListener { calculateTip() }.
view, keyCode, _ -> handleKeyEvent(view, keyCode).
TalkBackは飛ばした(ノ∀`)


Kotlinでリストを使用する

4. リストをループする

while ループ

注のところの"除算"のところがスラッシュじゃなくてバックスラッシュになってる?

5. すべてをまとめる

"by passing in "Noodles" as the name and the price of 10."

name と price を 10 として "Noodles" を渡すことで

なんか翻訳がおかしいな…

nameとしての"Noodles"とpriceの10を渡すことで

辺りかな?

toString() メソッドをオーバーライドする

When you print an object instance to the output
ここは出力じゃなくて逆にprintのままの方が意味が通じやすいんじゃなかろうか。或いは画面出力とか。今までもあったけど、単純にprintを"出力"に訳しちゃうと出力が持つ多義が理解の妨げを誘発するよね(´・ω・`)

なんでItemクラスでtoStringをオーバーライドしないんやろ。

みんな大好き可変長引数はvarargを使うのか。 ← お前が好きなだけや(・∀・)


RecyclerView を使用してスクロール可能なリストを表示する

3.データのリストのセットアップ

Affirmation データクラスを作成する

stringResourceIdは紛らわしくないかな?
文字列リソースのIdというのは間違いないが、この命名はstring型のリソースIdと誤解されそう。
AffirmationResourceIdでいいんじゃ?

4. アプリに RecyclerView を追加する

RecyclerView のアダプタを実装する

RecyclerView.

ViewHolder を作成する

ItemAdapter の右波かっこの前で

あれ? 今まで"中かっこ"って表記してたのに、なぜここで急に"波かっこ"にw

RecyclerViewViewHolder のサブクラスにして
"."抜け

この辺のAdapterとViewHolderの話からよくわからなくなってくる(ノ∀`)
これはある程度使い方に慣れるか、ソースを見ないとピンと来ないかもw


カードを使用して画像の一覧を表示する

2.リストアイテムに画像を追加する

ImageViewをリストアイテムのレイアウトに追加する

LinearLayout,
TextView,
centerCrop.

ItemAdapter を更新して画像を設定する

imageView.

3.UIの改良

カードを使用する

LinearLayout.

リソース アノテーションなんてものがあるんだねぇ…

あれ…?
今までクイズはずっと英語だったのに、ここから日本語に?
単純に今までも日本語に出来たのかな?

1問目 mutableでもミュータブルでもない…だと……( ;・´ω・`)ゴクリッ
7問目もnum in numbersじゃないのか…