预览问题,Jetpack Compose Android。

3
很多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
        )
    }
}

这主要是SDK的问题,但仍然无法正常工作。 我尝试了内置的建议来消除错误,但仍然没有进展。

1个回答

1

我有解决方案。

你只需要在gradle build中将compileSDKtargetSDK更改为33。然后清除缓存,你的构建就会正常工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接