首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无法访问“RowScopeInstance”:它是“androidx.compose.foundation.layout”中的内部

无法访问“RowScopeInstance”:它是“androidx.compose.foundation.layout”中的内部
EN

Stack Overflow用户
提问于 2022-10-09 01:50:24
回答 3查看 1.1K关注 0票数 1

我正试图实现以下布局

我尝试使用Row(Modifier.weight(50f)),这是编译器开始抛出

如果从ColumnInstance - import androidx.compose.foundation.layout.ColumnScopeInstance.weight导入

Cannot access 'ColumnScopeInstance': it is internal in 'androidx.compose.foundation.layout'

如果从RowInstance - androidx.compose.foundation.layout.RowScopeInstance.weight导入

Cannot access 'RowScopeInstance': it is internal in 'androidx.compose.foundation.layout'

在下面附加我的可组合代码

代码语言:javascript
运行
复制
@Composable
fun BoxLayout(){
    Row(Modifier.weight(50f)) {
        BoxWithText()
        BoxWithText()
    }
}

附加整个文件以供参考

代码语言:javascript
运行
复制
package me.sanjaykapilesh.layoutmastery

import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.RowScopeInstance.weight
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.material.MaterialTheme
import androidx.compose.material.Surface
import androidx.compose.material.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.Preview
import me.sanjaykapilesh.layoutmastery.ui.theme.LayoutMasteryTheme

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



@Composable
fun BoxLayout(){
    Row(Modifier.weight(50f)) {
        BoxWithText()
        BoxWithText()
    }
}

@Composable
fun BoxWithText() {
    Column() {
        Text(text = "Hello Box!")
        Text(text = "Displays text and follows Material Design guidelines")
    }

}

@Preview(showBackground = true)
@Composable
fun BoxLayoutPreview() {
    LayoutMasteryTheme {
        BoxLayout()
    }
}

我不知道为什么我会出错。我也无法实现Modifier.weight

问题- https://developer.android.com/codelabs/basic-android-kotlin-compose-composables-practice-problems?authuser=2&continue=https%3A%2F%2Fdeveloper.android.com%2Fcourses%2Fpathways%2Fandroid-basics-compose-unit-1-pathway-3%3Fauthuser%3D2%23codelab-https%3A%2F%2Fdeveloper.android.com%2Fcodelabs%2Fbasic-android-kotlin-compose-composables-practice-problems#3

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-10-09 05:00:47

有些修饰符是它们定义的作用域所特有的,比如Modifier.weight在默认情况下仅在RowScope或ColumnScope中可用。或者Modifier.align只能在BoxScope中使用。

当您希望访问这些修饰符时,您需要在这些作用域中包含可组合函数,或者创建一个带有这些作用域接收方的@Composable参数的函数

代码语言:javascript
运行
复制
@Composable
fun BoxLayout(){
    Row(Modifier.weight(50f)) {
        BoxWithText()
        BoxWithText()
    }
}

BoxLayout应该返回RowScope/ColumnScope,以便能够使用Modifier.weight,这可以作为

代码语言:javascript
运行
复制
@Composable
fun BoxWithLayout(content: @Composable RowScope.()->Unit){
    Row {
        content()
    }
}

@Composable
private fun Sample() {
   BoxWithLayout {
       Row(Modifier.weight(50f)) {
           BoxWithText()
           BoxWithText()
       }
   }
}

票数 2
EN

Stack Overflow用户

发布于 2022-10-28 19:39:59

您可以使用扩展函数来获取上下文。例如:

代码语言:javascript
运行
复制
@Composable
fun ColumnScope.BoxLayout(){
    Row(Modifier.weight(50f)) {
        BoxWithText()
        BoxWithText()
    }
}
票数 2
EN

Stack Overflow用户

发布于 2022-10-18 16:56:52

我也遇到过这样的问题。麻烦 --您可以尝试阻止"RowScope“,然后按Alt + Enter选择”环绕声小部件“结束选择”用列环绕“解决方案

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74001640

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档