Jetpack Compose

【Android】Jetpack Compose 入門講座 第12回「画像の追加」

Sara

はじめに

今回からは複数の画像とテキストを並べるレイアウトを作っていきます。

>> ここまでの記事はこちら

画像の用意

新しく4枚の画像を用意したので必要な方はダウンロードしてください。ご自身で用意したものでも大丈夫です。

犬の画像と同じように drawable フォルダに置いてください。

画像とテキストを並べる

画像とテキストを追加

犬のとなりに猫の画像を表示してみましょう。

まずは51〜67行目のコードをコピーして、すぐ後ろに貼り付けます。

画像は R.drawable.cat、contentDescription と Text を Cat に変更します。

プレビューをみると猫の画像だけが表示されています。

犬の画像と重なっているので Row レイアウトを使って横並びにしましょう。

新しい関数の追加

AnimalListElement 関数は Column で囲っている「画像とテキストだけ」を作成する関数にしたいので、新しく関数を作成します。

AnimalListElement 関数の後ろに、AnimalListRow という名前でコンポーザブル関数を作成します。

6〜9行目のコードを追加します。

1@Composable
2fun AnimalListElement(modifier: Modifier = Modifier) {
3    /* 省略 */
4}
5
6@Composable
7fun AnimalListRow(modifier: Modifier = Modifier) {
8    
9}
10
11@Preview
12@Composable
13private fun AnimalListElementPreview() {

この関数の中に Row レイアウトを用意して、そこから AnimalListElement 関数を呼び出します。

3〜5行目のコードを追加します。

1@Composable
2fun AnimalListRow(modifier: Modifier = Modifier) {
3    Row {
4        AnimalListElement()
5    }
6}

最後に MyApp 関数で AnimalLIstRow 関数を呼び出すように変更します(9行目)。

1@Composable
2fun MyApp(modifier: Modifier = Modifier) {
3    MyApplicationTheme {
4        Surface(
5            modifier = modifier
6                .fillMaxSize()
7                .statusBarsPadding()
8        ) {
9            AnimalListRow()
10        }
11    }
12}

犬と猫の画像が並んで表示されましたか?

少し分かりにくいかもしれませんが、Row の中で2つの Column を並べている状態です。

次に行うこと

画像を並べることはできましたが重複しているコードがたくさんあります。

このあと他の動物の画像も表示していきますが、動物によって変わるのは「画像名・contentDescription・text」の3箇所だけです。

最低限のコードで済むようにコードを修正していきましょう。

第13回「コードの重複を修正」に進む

ここまでのコード

package com.example.myapplication

import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge
import androidx.compose.foundation.Image
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.statusBarsPadding
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.material3.Surface
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import com.example.myapplication.ui.theme.MyApplicationTheme

class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        enableEdgeToEdge()
        setContent {
            MyApp()
        }
    }
}

@Composable
fun MyApp(modifier: Modifier = Modifier) {
    MyApplicationTheme {
        Surface(
            modifier = modifier
                .fillMaxSize()
                .statusBarsPadding()
        ) {
            AnimalListRow()
        }
    }
}

@Composable
fun AnimalListElement(modifier: Modifier = Modifier) {
    Column(
        horizontalAlignment = Alignment.CenterHorizontally,
        modifier = modifier.padding(8.dp)
    ) {
        Image(
            painter = painterResource(id = R.drawable.dog),
            contentDescription = "Dog",
            contentScale = ContentScale.Crop,
            modifier = modifier
                .size(80.dp)
                .clip(CircleShape)
        )
        Text(
            text = "Dog",
            modifier = modifier.padding(top = 4.dp)
        )
    }
    Column(
        horizontalAlignment = Alignment.CenterHorizontally,
        modifier = modifier.padding(8.dp)
    ) {
        Image(
            painter = painterResource(id = R.drawable.cat),
            contentDescription = "Cat",
            contentScale = ContentScale.Crop,
            modifier = modifier
                .size(80.dp)
                .clip(CircleShape)
        )
        Text(
            text = "Cat",
            modifier = modifier.padding(top = 4.dp)
        )
    }
}

@Composable
fun AnimalListRow(modifier: Modifier = Modifier) {
    Row {
        AnimalListElement()
    }
}

@Preview
@Composable
private fun AnimalListElementPreview() {
    AnimalListElement()
}

@Preview
@Composable
private fun MyAppPreview() {
    MyApp()
}

講座の最新情報はこちら

Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
ABOUT ME
Sara
書籍やオンライン講座でプログラミングを勉強してフリーランスのプログラマーになりました。
このサイトでは「わかりやすく・シンプル」をモットーに、プログラミングの基礎からアプリ開発まで紹介します。
独学でプログラミングを勉強をしている方、基礎は勉強したけれど次に何をすれば良いか分からない...という方のお役に立てるサイトを目指しています。
主な使用言語:Java / Kotlin / PHP
>> 詳しいプロフィール
>> お問い合わせ
>> 書籍を出版しました!
本格的に学びたい方へ

Code for Fun プログラミング講座

Code for Fun プログラミング講座では、プログラミングの基礎からアプリ開発まで学ぶことができます。

わかりやすく・シンプルをモットーに

  • 同じコードを書けば必ず完成できること
  • 専門用語を使いすぎないこと

を重視しています。

POINT 01

動くコード

プログラミングの文法だけを学んでも、そこから動くアプリを開発をするのは難しいです。

Code for Fun のプログラミング講座では、ゲームやカレンダーなど「アプリとして機能するもの」を作りながらプログラミングを学ぶことができます。

POINT 02

自分のペースで

オンライン講座なので、ご自身のペースで学習を進めて頂けます。

分からないことがあっても、前のレッスンに戻ることができるので安心です。

お申し込みしたその日からからすぐに始めることができます。

POINT 03

個別サポート

プログラミング学習では、エラーが起きることはよくあります。そんな時はお気軽にお問い合わせください!

コメント欄またはメールによるサポートを回数無制限でご利用頂けます。(*講座に関連するご質問のみ対応)

今すぐ無料でお試し

0
この記事にコメントするx
記事URLをコピーしました