4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Jetpack Composeを使ってみる

Last updated at Posted at 2021-03-11

今回は「Jetpack Composeの設定」と「簡単なテキストを表示する」ところまでやってみたいと思います。

Jetpack Composeの設定

developersの以下の記事を参考に設定を行いました。

Android Studio で Jetpack Compose を使用する

1. Composeに対応しているAndroid Studioをインストールする

以下のURLから「DOWNLOAD ARCTIC FOX CANARY 9」をインストールします。

Preview release

2. Android Studioで新規Projectを作成する

プロジェクトを作成するときに、APIレベル21以上(Android 5.0/Lollipop)を選択します。

3. Kotlinのバージョンを1.4.21に変更する

build.gradle
dependencies {
  classpath "com.android.tools.build:gradle:7.0.0-alpha09"
  classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.4.21"
}

4. Composeライブラリを依存関係に追加する

app/build.gradle
// バージョンを上げれるよ、とAndroid Studioが教えてくれますが、そのままでOKです。
dependencies {

    implementation 'androidx.compose.ui:ui:1.0.0-alpha10'
    // Tooling support (Previews, etc.)
    implementation 'androidx.compose.ui:ui-tooling:1.0.0-alpha10'
    // Foundation (Border, Background, Box, Image, Scroll, shapes, animations, etc.)
    implementation 'androidx.compose.foundation:foundation:1.0.0-alpha10'
    // Material Design
    implementation 'androidx.compose.material:material:1.0.0-alpha10'
    // Material design icons
    implementation 'androidx.compose.material:material-icons-core:1.0.0-alpha10'
    implementation 'androidx.compose.material:material-icons-extended:1.0.0-alpha10'
    // Integration with observables
    implementation 'androidx.compose.runtime:runtime-livedata:1.0.0-alpha10'
    implementation 'androidx.compose.runtime:runtime-rxjava2:1.0.0-alpha10'
    // UI Tests
    androidTestImplementation 'androidx.compose.ui:ui-test-junit4:1.0.0-alpha10'
}

簡単なテキストを表示する

setContentでText関数を呼び出す

レイアウトをXMLファイルで定義するのではなく、setContentブロックでActivityのレイアウトを定義します。

そして、setContentブロックの中で、コンポーズ可能な関数を呼び出します。

setContentView(R.layout.activity_main)は削除してOKです。

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        setContent {
            Text("Hello World")
        }
    }
}

すると、以下の画面が表示されます。

Screenshot_1615268824.png

コンポーズ可能な関数を作成する

コンポーズ可能な関数は、他のコンポーズ可能な関数から呼び出すことが出来ます。
つまり、@Composableアノテーションが設定された関数のスコープ内からのみ呼び出しが可能です。

// Good
@Composable
fun method01(name: String) = Text(text = name)
// Bad(@Composableがない関数で、Text関数を呼び出している)
fun method02(name: String) = Text(text = name)

MainActivity.ktを以下のように変更します。

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            Greeting("World")
        }
    }
}

@Composable
fun Greeting(name: String) = Text(text = "Hello $name")

上記を実行すると、先ほどと同じ画面が表示されると思います。

Android Studioで関数をプレビューする

Android Studioで関数をプレビューするには、作成した関数の@Composableアノテーションの前に、@Previewを設定します。

注意点として、プレビューする関数はパラメータを使用することが出来ません。

なので、Greeting関数は引数にname: Stringがあるので、他の関数を定義する必要があります。

引数がある関数に@Previewを設定すると「Composable function with non-default parameters are not supported in Preview unless they are annotated with @PreviewParameter」エラーが表示されます。

// 引数があるので、@Previewアノテーションを付けることが出来ない
@Preview
@Composable
fun Greeting(name: String) = Text(text = "Hello $name")

Greeting関数を呼び出す別の関数「PreviewGreeting関数」を作成し、@Previewアノテーションを設定します。

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            Greeting("World")
        }
    }
}

@Composable
fun Greeting(name: String) = Text(text = "Hello $name")

// 追加
@Preview
@Composable
fun PreviewGreeting() = Greeting(name = "Android")

PreviewGreeting関数を追加した後に再ビルドすると、Android Studioの右側にプレビューが表示されます。

スクリーンショット 2021-03-09 15.38.12.png

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?