「This material API is experimental and is likely to change or to be removed in the future.」の対応

Androidの開発で「This material API is experimental and is likely to change or to be removed in the future.」というエラーに遭遇した際の対応をご紹介します。

条件

  • Android
  • Jetpack Compose Material Design 3

エラーの例

material3でTextFieldを使用する場合

以下のように、TextFieldでエラーが出ています。

解決策

「@OptIn(ExperimentalMaterial3Api::class)」というアノテーションを追加します。

理由

理由は以下の通りです。(出典:https://developer.android.com/)

一部の M3 API は試験運用版とみなされています。
その場合は、ExperimentalMaterial3Api アノテーションを使用して、関数レベルまたはファイルレベルでオプトインする必要があります。

問題が解決したソース

package com.example.tiptime

import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Surface
import androidx.compose.material3.Text
import androidx.compose.material3.TextField
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import com.example.tiptime.ui.theme.TipTimeTheme

class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            TipTimeTheme {
                // A surface container using the 'background' color from the theme
                Surface(
                    modifier = Modifier.fillMaxSize(),
                    color = MaterialTheme.colorScheme.background
                ) {
                    TipTimeScreen()
                }
            }
        }
    }
}

@Composable
fun TipTimeScreen() {
    Column(
        modifier = Modifier.padding(32.dp),
        verticalArrangement = Arrangement.spacedBy(8.dp)
    ) {
        Text(
            text = stringResource(R.string.calculate_tip),
            fontSize = 24.sp,
            modifier = Modifier.align(Alignment.CenterHorizontally)
        )
        Spacer(Modifier.height(16.dp))
        EditNumberField()
    }
}

@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun EditNumberField() {
    val amountInput = "0"

    TextField(
        value = amountInput,
        onValueChange = {}
    )
}

@Preview(showBackground = true)
@Composable
fun GreetingPreview() {
    TipTimeTheme {
        TipTimeScreen()
    }
}

参考

developer.android.com:試験運用版 API

https://developer.android.com/jetpack/compose/designsystems/material2-material3?hl=ja#experimental-apis

stackoverflow:I cannot use TextField() in jetpack Compose(Material 3)

https://stackoverflow.com/questions/74237514/i-cannot-use-textfield-in-jetpack-composematerial-3

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です