【问题标题】:Issue in preview , Jetpack Compose Android预览版中的问题,Jetpack Compose Android
【发布时间】:2022-11-12 19:31:38
【问题描述】:

API上显示很多错误,

在 LazyVerticalGrid 部分显示错误:

This foundation API is experimental and is likely to change or be removed in the future.

在工作日部分:

Field requires API level 26 (current min is 21): `java.time.DayOfWeek#SUNDAY`

在月份部分有这个错误:

Field requires API level 26 (current min is 21): `java.time.Month#JULY`

package com.example.android.weatherapp.ui.components

import android.os.Build
import androidx.annotation.DrawableRes
import androidx.annotation.RequiresApi
import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.lazy.GridCells
import com.example.android.weatherapp.R
import androidx.compose.foundation.lazy.GridItemSpan
import androidx.compose.foundation.lazy.LazyVerticalGrid
import androidx.compose.foundation.lazy.items
import androidx.compose.material.Card
import androidx.compose.material.Icon
import androidx.compose.material.MaterialTheme
import androidx.compose.material.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import com.example.android.weatherapp.ui.theme.WeatherAppTheme
import java.time.DayOfWeek
import java.time.format.TextStyle
import java.util.*

data class Month(
    val title : String ,
    val dateForecasts: List<DateForeCast>
)

data class DateForeCast(
    val date: String,
    val highTemperature: String,
    @DrawableRes val icon: Int
)
@Composable
fun Calendar(
    months : List<Month>,
    modifier: Modifier = Modifier
){
    val gridCellNumber = 7
    LazyVerticalGrid(
        modifier = modifier ,
        cells = GridCells.Fixed(gridCellNumber)
    ){
        months.forEach { month ->
            item(
                span = { GridItemSpan(gridCellNumber) }
            ) { MonthLabel(month = month.title) }
            items(month.dateForecasts){
                DateCard(dataForecasts = it )
            }
        }
    }
}
@Composable
fun MonthLabel(
    month: String,
    modifier: Modifier = Modifier
){
    val weekdays = listOf(
            DayOfWeek.SUNDAY,
            DayOfWeek.MONDAY,
            DayOfWeek.TUESDAY,
            DayOfWeek.WEDNESDAY,
            DayOfWeek.THURSDAY,
            DayOfWeek.FRIDAY,
            DayOfWeek.SATURDAY
        ).map{
            it.getDisplayName(TextStyle.SHORT, Locale.getDefault())
        }

    Column(
        modifier = modifier.fillMaxWidth()
    ) {
        Text(
            text = month ,
            modifier = Modifier.fillMaxWidth(),
            textAlign = TextAlign.Center,
            style = MaterialTheme.typography.h5.copy(fontWeight = FontWeight.SemiBold)
        )
        Row(modifier = Modifier.fillMaxWidth() ){
            weekdays.forEach{
                Text(
                    text = it,
                    textAlign = TextAlign.Center,
                    style = MaterialTheme.typography.body2,
                    modifier = Modifier.weight(1f,true)
                )
            }
        }
    }
}
@Preview(
    showBackground = true
)
@Composable
fun CalendarPreview(){
    val months = listOf(
        Month(
            title = "July",
            dateForecasts = List(java.time.Month.JULY.length(false)){
                DateForeCast(
                    date = "$it + 1",
                    highTemperature = "70",
                    icon = R.drawable.cloud_cloudy_day_forecast_sun_icon
                )
            }
        ),
        Month(
            title = "August",
            dateForecasts = List(java.time.Month.AUGUST.length(false)){
                DateForeCast(
                    date = "$it + 1",
                    highTemperature = "70",
                    icon = R.drawable.cloud_cloudy_day_forecast_sun_icon
                )
            }
        )

    )
    WeatherAppTheme {
        Calendar(months = months )
    }
}
@Composable
fun DateCard(
    dataForecasts: DateForeCast,
    modifier: Modifier = Modifier
) = Card (
    modifier = modifier,
){
    Column (
        modifier = Modifier.padding(8.dp),
        verticalArrangement = Arrangement.SpaceEvenly,
        horizontalAlignment = Alignment.CenterHorizontally
    ){
        Text(
            text = dataForecasts.date,
            style = MaterialTheme.typography.overline,
            color = Color.Blue
        )
        Icon(
            painter = painterResource(id = dataForecasts.icon ),
            contentDescription = null,
            modifier = Modifier
                .padding(vertical = 16.dp)
                .size(24.dp),
            tint = Color.Unspecified
        )
    }
}

我试过了

@OptIn(ExperimentalFoundationApi::class)

这对于 LazyVerticalGrid 和 试过了

@RequiresApi(Build.VERSION_CODES.O)

这对于其余的错误。 但预览仍然显示“尝试呈现此预览时发现了一些问题。”

【问题讨论】:

    标签: android api android-jetpack-compose


    【解决方案1】:

    我有解决方案。

    你只需要改变你的编译SDK目标SDK33梯度构建. 然后只需清除缓存,您的构建就会正常工作。

    【讨论】:

      猜你喜欢
      • 2021-10-13
      • 1970-01-01
      • 1970-01-01
      • 2021-04-26
      • 1970-01-01
      • 2021-09-20
      • 2021-12-18
      • 2021-11-05
      • 2021-06-29
      相关资源
      最近更新 更多