类 'androidx.compose.ui.platform.ComposeView' 由新的 Kotlin 编译器后端编译,旧编译器无法加载
这是我的 onCreate 方法:
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
return inflater.inflate(R.layout.fragment_delivered, container, false).apply {
findViewById<ComposeView>(R.id.compose_view).setContent {
MaterialTheme {
Surface {
Text("Hello")
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
编写版本:
accompanistVersion = "0.1.9"
composeVersion = '0.1.0-dev17'
Run Code Online (Sandbox Code Playgroud)
应用程序.gradle
buildFeatures {
compose true
dataBinding true
}
composeOptions {
kotlinCompilerVersion rootProject.kotlinVersion
kotlinCompilerExtensionVersion rootProject.composeVersion
}
// Compose
implementation "androidx.compose.runtime:runtime:$rootProject.composeVersion"
implementation "androidx.compose.ui:ui:$rootProject.composeVersion"
implementation "androidx.compose.foundation:foundation:$rootProject.composeVersion"
implementation "androidx.compose.foundation:foundation-layout:$rootProject.composeVersion"
implementation "androidx.compose.material:material:$rootProject.composeVersion"
implementation "androidx.compose.ui:ui-viewbinding:$rootProject.composeVersion"
implementation "androidx.ui:ui-tooling:$rootProject.composeVersion"
implementation "androidx.compose.runtime:runtime-livedata:$rootProject.composeVersion"
implementation "com.google.android.material:compose-theme-adapter:$rootProject.composeVersion"
implementation …Run Code Online (Sandbox Code Playgroud) 我怎样才能在全屏渲染树的深处制作一个可组合项,类似于Dialog可组合项的工作原理?
例如,当用户单击图像时,它会显示该图像的全屏预览,而无需更改当前路线。
我可以在 CSS 中使用position: absoluteor来完成此操作position: fixed,但如何在 Jetpack Compose 中执行此操作?有可能吗?
一种解决方案是在树的顶部有一个可组合项,可以将另一个可组合项作为参数从树中的其他位置传递,但这听起来有点混乱。当然有更好的方法。
Android Studio 大黄蜂补丁 3
从这个页面,它说我可以看到重组计数: https: //developer.android.com/jetpack/compose/tooling#recomposition-counts
它没有向我显示菜单选项。仅设备名称和“停止检查器”
android layout-inspector android-jetpack android-jetpack-compose compose-recomposition
我有如下屏幕,其中在同一屏幕上包含导航抽屉和底部导航:
我正在使用 Jetpack 导航架构组件。
当前问题和我尝试了什么?
单击第二个和第三个底部导航项会在工具栏上显示后退箭头吗?
尝试过:将与第二和第三底部导航相关的片段设置为顶级目的地
appBarConfig = AppBarConfiguration(setOf(R.layout.fragment_star, R.layout.fragment_stats, R.layout.fragment_user))
Run Code Online (Sandbox Code Playgroud)
代替
appBarConfig = AppBarConfiguration(navController.graph, drawerLayout)
Run Code Online (Sandbox Code Playgroud)
没有工作。
任何帮助高度赞赏!
我的代码如下所示。
活动_main.xml
<?xml version="1.0" encoding="utf-8"?>
<layout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<androidx.drawerlayout.widget.DrawerLayout
android:id="@+id/drawerLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"/>
<fragment
android:id="@+id/navHostFragment"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
app:defaultNavHost="true"
app:navGraph="@navigation/nav_graph" />
<com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/bottomNav"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:background="?android:attr/windowBackground"
app:menu="@menu/menu_bottom" />
</LinearLayout>
<!-- gives navDrawer material look-->
<com.google.android.material.navigation.NavigationView
android:id="@+id/navView"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
app:menu="@menu/nav_drawer_menu"
app:headerLayout="@layout/nav_header"
android:fitsSystemWindows="true"
/>
</androidx.drawerlayout.widget.DrawerLayout>
</layout>
Run Code Online (Sandbox Code Playgroud)
menu_bottom.xml
<?xml version="1.0" encoding="utf-8"?> …Run Code Online (Sandbox Code Playgroud) android kotlin android-jetpack android-architecture-navigation
这是我的AllFilesListViewModel课。
class AllFilesListViewModel @ViewModelInject constructor(
private val pdfItemRepository: PdfItemRepository):ViewModel() {
}
Run Code Online (Sandbox Code Playgroud)
这里是PdfItemRepository课堂。
@Singleton
class PdfItemRepository @Inject constructor(private val pdfItemDao: PdfItemDao){
}
Run Code Online (Sandbox Code Playgroud)
对于pdfItemDao. 我创建了一个名为DatabaseModule. 下面是代码——
@Module
@InstallIn(ApplicationComponent::class)
object DatabaseModule {
@Provides
fun provideDatabase(@ApplicationContext context: Context):AppDatabase{
return AppDatabase.getDataBase(context)
}
@Provides
fun providePdfItemDao(database:AppDatabase):PdfItemDao{
return database.pdfItemDao()
}
}
Run Code Online (Sandbox Code Playgroud)
这是AllFilesFragment.kt我使用 viewModel的片段类。
@AndroidEntryPoint
class AllFilesFragment:Fragment(){
private lateinit var binding:AllFilesFragmentBinding
private val viewModel by viewModels<AllFilesListViewModel>()
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? { …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用撰写惰性列,我希望惰性列的每个项目都具有最大高度,我尝试了下面的代码,但它没有给出预期的结果
代码
val itemsList:按 mainScreenViewModel.portfolioItems.observeAsState(listOf()) 列出
Box(modifier = Modifier.fillMaxSize()) {
Column(modifier = Modifier.matchParentSize()) {
LazyColumn(
content = {
itemsIndexed(itemsList) { index, item ->
Text(text = "Hello", modifier = Modifier.fillMaxHeight())
}
},
)
}
}
Run Code Online (Sandbox Code Playgroud) android android-jetpack android-jetpack-compose android-jetpack-compose-list
我有一个可组合项,它将Modifier实例传递给其子可组合项,如下所示:
@Composable
fun MyComposable(
modifier: Modifier = Modifier,
content: @Composable BoxScope.() -> Unit,
) {
Box(
modifier = modifier.fillMaxWidth(),
content = content,
)
}
Run Code Online (Sandbox Code Playgroud)
这会将fillMaxWidth修饰符添加到参数中modifier。但是,这不是所需的行为,因为我希望fillMaxWidth成为默认宽度,但仍然允许调用者覆盖它。
如何组合/合并两个修改器,同时将本地修改器设置为默认修改器?
我开始注意到我的应用程序中出现了一些卡顿,我相信原因是可组合项在不应该的情况下被重新组合。
我检测到一些用户交互触发了不必要的重新组合,但我无法确定是什么导致了重新组合。我在修改状态的每个地方都添加了断点,并且仍然可以找到触发重组的内容。
AS有提供调试这种事情的方法吗?
以前可以在文本中加入一种动画,如果文本超出限制,就会自动水平滚动。这是通过 include: 完成的android:ellipsize="marquee",结果类似于此处显示的结果:
问题是,在 Jetpack Compose 中,我看不到在可组合文本中包含该选项的方法,有TextOverflow包含剪辑、省略号或可见选项的方法,但我不知道是否有方法可以包含或使用 Jetpack Compose 中的“Marquee”选项。有什么办法可以做到吗?
我有一个Image如下所示的组合:
Image(
bitmap = ImageBitmap.imageResource(id = R.drawable.testimage),
contentDescription = null, // Only decorative image
contentScale = ContentScale.FillWidth,
modifier = Modifier
.requiredHeightIn(max = 250.dp)
.fillMaxWidth()
.semantics { testTag = "MyTestTag" },
)
Run Code Online (Sandbox Code Playgroud)
在仪器测试期间,我想确保设置了正确的绘图。我在类中没有找到任何东西可以实现这一点,例如SemanticsProperties编写自定义匹配器。有人可以帮忙吗?
android ×10
android-jetpack ×10
kotlin ×7
android-architecture-navigation ×1
android-jetpack-compose-list ×1
dagger-hilt ×1