相关疑难解决方法(0)

如何在Android中以dp或dip的形式确定屏幕宽度?

我需要使用dip/dp(在java文件中)编写android小部件的布局.在运行时如果我编码,

int pixel=this.getWindowManager().getDefaultDisplay().getWidth();

这将返回屏幕宽度(以像素为单位)(px).为了将其转换为dp,我编码:

int dp =pixel/(int)getResources().getDisplayMetrics().density ;

这似乎没有返回正确的答案.我制作了WVGA800的模拟器,其屏幕分辨率为480×800.当运行模拟器并让代码打印像素和dp的值时,两者都达到了320.该仿真器为240 dpi,其比例因子为0.75.

android density-independent-pixel

186
推荐指数
7
解决办法
15万
查看次数

Jetpack Compose LazyRow - 居中所选项目

如何计算 LazyRow 中所选项目的位置并将其用于使项目在屏幕上居中?这些物品将根据其内容而具有不同的尺寸。

如果我选择lazyListState.animateScrollToItem(index)所选项目将位于 LazyRow 的左侧。 结果

我想要实现的是让所选项目像这样居中 预期的

我目前拥有的代码:

@Composable
fun Test() {
    Column {
        TestRow(listOf("Angola", "Bahrain", "Afghanistan", "Denmark", "Egypt", "El Salvador", "Fiji", "Japan", "Kazakhstan", "Kuwait", "Laos", "Mongolia"))
        TestRow(listOf("Angola", "Bahrain", "Afghanistan"))
    }
}

@OptIn(ExperimentalSnapperApi::class)
@Composable
fun TestRow(items: List<String>) {
    val selectedIndex = remember { mutableStateOf(0) }
    val lazyListState = rememberLazyListState()
    val coroutineScope = rememberCoroutineScope()

    LazyRow(
        modifier = Modifier.fillMaxWidth(),
        state = lazyListState,
        horizontalArrangement = Arrangement.spacedBy(8.dp, Alignment.CenterHorizontally),
        contentPadding = PaddingValues(horizontal = 12.dp),
        flingBehavior = rememberSnapperFlingBehavior(
            lazyListState = lazyListState,
            snapOffsetForItem = SnapOffsets.Start …
Run Code Online (Sandbox Code Playgroud)

android kotlin android-jetpack-compose android-jetpack-compose-list

14
推荐指数
2
解决办法
4370
查看次数