ドックにアイコンを追加するには [Tools] > [Create Desktop Entry…] を実行する。
この機能自体はドキュメントで説明されてるんだけど、Android 開発の入門者が最初に見るであろうトレーニングには書かれてない。トレーニングに沿って勉強してた僕は、ここで不要に躓いてしまった 😦 これから勉強する人が躓かないようにメモしておこう。
さて、上に書いた通り、僕は Android の初心者向けトレーニングに挑戦してみた。ここから先は、そのトレーニングの最初の最初をやってみた感想を書いてみよう。話題はガラリと変わります。
初心者向けトレーニング ユニット 1 に挑戦した現時点の感想
Android 公式の初心者向けトレーニング [Compose を用いた Android アプリ開発の基礎] のユニット 1 のパスウェイ 3 の途中まで完了した時点の僕の感想を書こう。ユニット 1 は基本的な UI を組み立てる練習で、パスウェイ 3 の [7 練習問題: Compose の基本] は 3 つの UI を自力で組み立てる実践課題だった。
Linux で Android Studio を導入するの、ちょっとムズい
- Flatpak 版 Android Studio はエミュレータが正しく起動しなかった
- Fedora ユーザなので、可能なら Flatpak を使うのが良いかなと思ったんだけど
- 普通にトレーニングの指示に従い、公式サイトからダウンロードしました
- ドックにアイコンを追加するには [Tools] > [Create Desktop Entry…] を実行する
- 別のドキュメントに書かれてるんだけど、トレーニングには書かれてなくて不便 😦
modifier が分からん
- 取り組み中の [7 練習問題: Compose の基本] の、To Do 管理アプリの完了画面を作る課題の話
- 画像と文字を、画面のど真ん中に配置する
- こんなコードを書いてみたんだけど、たぶん良い実践に沿ってないと思う (関数名は project 生成時のままです、すみません🙇)
- 何が起こってるか自分で書いておいてよく分かってないし、どうするのが正しいのかも分からない…
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
setContent {
TaskManagerCompletedTheme {
Scaffold(modifier = Modifier.fillMaxSize()) { innerPadding ->
Greeting(
name = "Android",
modifier = Modifier.padding(innerPadding)
)
}
}
}
}
}
@Composable
fun Greeting(name: String, modifier: Modifier = Modifier) {
Column(
modifier = Modifier.fillMaxSize(),
verticalArrangement = Arrangement.Center,
) {
val image = painterResource(R.drawable.ic_task_completed)
Image(
painter = image,
contentDescription = null,
modifier = modifier.align(Alignment.CenterHorizontally)
)
Text(
text = "All tasks completed",
fontWeight = FontWeight.Bold,
modifier = modifier
.paddingFromBaseline(24.dp, 8.dp)
.align(Alignment.CenterHorizontally)
)
Text(
text = "Nice work!",
fontSize = 16.sp,
modifier = modifier.align(Alignment.CenterHorizontally)
)
}
}
modifierって:- 最初の
onCreate()内のGreeting()実行時に生成されたModifierインスタンスが引き回されている? (引き回されるべき?) - それとも都度インスタンスが生成されている? (生成されるべき?)
- それとも、全然そういう感じじゃない?
- 最初の
- 例えば、上記の
Column()はGreeting()の呼び出し時に渡されたmodifierを使わずに再生成してる?- その上で
Column()内のImage()とText()は、Column()実行時に生成されたmodifierを受け取って使ってる?
- その上で
- これら (↑) の推測が正しいかどうか分かってないし、仮に正しいとして、これが良い実践に沿っているかどうかも分からない😢
[Design] ペインとエミュレータの表示が一致してない気がする
- これも、取り組み中の [7 練習問題: Compose の基本] の話。
Composeについての記事を表示する風のアプリの UI を作る
- 指定された通りの padding を設定したつもりだけど、[Design] ペインとエミュレータの表示が一致していない。なんかエミュレータのほうがパディングが広い
- 書いたコードはこんな感じ。これも
modifierの取り扱いがポイントだったりするんだろうか?
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
setContent {
ComposePracticeTheme {
Scaffold(
modifier = Modifier.fillMaxSize()) { innerPadding ->
Greeting(
name = "Android",
modifier = Modifier.padding(innerPadding)
)
}
}
}
}
}
@Composable
fun Greeting(name: String, modifier: Modifier = Modifier) {
val image = painterResource(R.drawable.bg_compose_background)
Column(modifier, verticalArrangement = Arrangement.Top) {
Image(
painter = image,
contentDescription = null,
contentScale = ContentScale.Fit
)
Text(
text = stringResource(R.string.jetpack_compose_tutorial),
fontSize = 24.sp,
modifier = modifier
.padding(16.dp)
)
Text(
text = stringResource(R.string.jetpack_text_01),
modifier = modifier
.padding(horizontal = 16.dp, vertical = 0.dp),
textAlign = TextAlign.Justify
)
Text(
text = stringResource(R.string.jetpack_string_02),
modifier = modifier
.padding(16.dp),
textAlign =TextAlign.Justify
)
}
}
GitHub にコードを載せたい
- これは単に積み残し。まぁ別に書いて捨てられる程度の規模のコードでしかないけど、記録としてね
- Android Studio と GitHub の連携も調べないといけないね。トレーニングの目次を見ても、Git の話題は取り扱いがなさそうだし
(補足) Android のトレーニングとは?
Android アプリ開発に入門したい人向けに、Google が公式に用意するトレーニングのこと。トレーニングには、次に挙げる 5 種類のコンテンツがある
- 初心者向け
- 経験豊富な Android デベロッパー向け
- Kotlin 言語のトレーニング
- Android Java デベロッパー向け
- 認定資格プログラム
このうち、初心者向けの [Compose を用いた Android アプリ開発の基礎] は Android 入門者が最初に学ぶ教材として最適だと思う。僕がやったのもこれ。8 つのユニットを通して Android アプリ開発のいろはを順に体験していく。想定の所要時間の合計がちょうど 100 時間の、かなり本格的なトレーニングだ。以下は目次。
| ユニット | パスウェイ | 所要時間 [時間] |
|---|---|---|
| 1: 初めての Android アプリ | 1: Kotlin の概要 | 3 |
| 〃 | 2: Android Studio をセットアップする | 4 |
| 〃 | 3: 基本的なレイアウトを作成する | 3 |
| 2: アプリ UI を作成する | 1: Kotlin の基礎 | 8 |
| 〃 | 2: アプリにボタンを追加する | 6 |
| 〃 | 3: UI と状態を操作する | 7 |
| 3: リストの表示とマテリアル デザインの使用 | 1: Kotlin の基礎(その他) | 8 |
| 〃 | 2: スクロール可能なリストを作成する | 4 |
| 〃 | 3: 美しいアプリを作成する | 3 |
| 4: ナビゲーションとアプリ アーキテクチャ | 1: アーキテクチャ コンポーネント | 9 |
| 〃 | 2: Jetpack Compose でのナビゲーション | 6 |
| 〃 | 3: さまざまな画面サイズに適応する | 13 |
| 5: インターネットに接続する | 1: インターネットからデータを取得する | 6 |
| 〃 | 2: インターネットから画像を読み込んで表示する | 3 |
| 6: データの永続化 | 1: SQL の概要 | 2 |
| 〃 | 2: Room を使用してデータを永続化する | 6 |
| 〃 | 3: DataStore でキーを使用してデータにアクセスし保存する | 2 |
| 7: WorkManager | 1: WorkManager でタスクのスケジュールを設定する | 3 |
| 8: Compose とビュー | 1: ビュー内の Android ビューと Compose | 3 |
| 〃 | 2: Compose 内のビュー | 1 |

