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
stackoverflow:I cannot use TextField() in jetpack Compose(Material 3)
https://stackoverflow.com/questions/74237514/i-cannot-use-textfield-in-jetpack-composematerial-3