当我尝试从github 编译导入的项目时,我的gradle构建总是失败,并带有以下例外.
Unable to find method 'org.gradle.api.tasks.testing.Test.getTestClassesDirs()Lorg/gradle/api/file/FileCollection;'
Possible causes for this unexpected error include:<ul><li>Gradle's dependency cache may be corrupt (this sometimes occurs after a network connection timeout.)
Re-download dependencies and sync project (requires network)</li><li>The state of a Gradle build process (daemon) may be corrupt. Stopping all Gradle daemons may solve this problem.
Stop Gradle build processes (requires restart)</li><li>Your project may be using a third-party plugin which is not compatible with the other plugins in the project or the …Run Code Online (Sandbox Code Playgroud) 您可以在Github上找到一个示例项目来重现该问题
我一直在尝试使用 Jetpack Compose 作为键盘 UI。最终,当我尝试通过 InputMethodService 膨胀键盘时
class IMEService : InputMethodService() {
override fun onCreateInputView(): View = KeyboardView(this)
}
Run Code Online (Sandbox Code Playgroud)
通过使用这个视图
class KeyboardView(context: Context) : FrameLayout(context) {
init {
val view = ComposeView(context).apply {
setContent {
Keyboard() //<- This is the actual compose UI function
}
}
addView(view)
}
}
Run Code Online (Sandbox Code Playgroud)
或者
class KeyboardView2 constructor(
context: Context,
) : AbstractComposeView(context) {
@Composable
override fun Content() {
Keyboard()
}
}
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试使用键盘时,出现以下错误
class KeyboardView2 constructor(
context: Context,
) : AbstractComposeView(context) {
@Composable …Run Code Online (Sandbox Code Playgroud) android android-input-method android-view android-jetpack-compose
添加时
implementation
('com.google.android.ads.consent:consent-library:1.0.0') {
exclude module: 'androidx.activity'
}
Run Code Online (Sandbox Code Playgroud)
到我的 app/build.gradle 文件,我收到此错误:错误:程序类型已存在:androidx.activity.R$attr
我做了什么: 1. gradlew androidDependencies 但我找不到任何重复项
阅读:https : //developer.android.com/studio/build/dependencies#duplicate_classes。
其他建议排除支持库版本的 stackoverflow 答案对我没有帮助
repositories {
maven { url 'https://maven.fabric.io/public' }
}
configurations {
all*.exclude group: 'com.google.guava', module: 'listenablefuture'
}
configurations.all {exclude group: 'com.android.support', module: 'support-v13'}
dependencies {
def nav_version = "1.0.0"
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation 'androidx.appcompat:appcompat:1.1.0-alpha05'
implementation 'androidx.core:core-ktx:1.1.0-alpha05'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test:runner:1.1.2-alpha02'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0-alpha02'
androidTestImplementation 'androidx.test.ext:junit:1.1.0'
androidTestImplementation 'androidx.test:rules:1.1.1'
androidTestImplementation 'androidx.test:core-ktx:1.1.0'
implementation "com.vorlonsoft:androidrate:1.2.1"
implementation …Run Code Online (Sandbox Code Playgroud) 当我发现 Android 上的 Facebook 应用程序显然能够在未经许可的情况下安装 Facebook Messenger 应用程序时,我感到非常惊讶。

我知道可以通过另一个应用程序安装应用程序,但用户需要通过系统对话框确认安装。除此之外,在较新的 Android 版本上,用户需要向尝试发出安装请求的应用授予“从未知来源安装”的权限。
然而,我没有授予 Facebook 任何安装权限,也没有系统级别的对话框要求我确认安装。我还确保之前尚未安装 Messenger。
我使用的是运行 Android 10 (Miui 12) 的 Poco F2 Pro。我在不同的设备上观察到相同的行为。Facebook在这里使用了什么样的魔法?
我想使用 Jetpack Compose 构建这个从 AirBnB 应用程序按下的精彩按钮动画

不幸的是,动画/过渡 API 最近发生了变化,而且几乎没有相关的文档。有人可以帮助我找到实现此按钮按下动画的正确方法吗?
编辑 根据 @Amirhosein 的回答,我开发了一个按钮,看起来几乎与 Airbnb 的示例一模一样
代码:
@Composable
fun AnimatedButton() {
val boxHeight = animatedFloat(initVal = 50f)
val relBoxWidth = animatedFloat(initVal = 1.0f)
val fontSize = animatedFloat(initVal = 16f)
fun animateDimensions() {
boxHeight.animateTo(45f)
relBoxWidth.animateTo(0.95f)
// fontSize.animateTo(14f)
}
fun reverseAnimation() {
boxHeight.animateTo(50f)
relBoxWidth.animateTo(1.0f)
//fontSize.animateTo(16f)
}
Box(
modifier = Modifier
.height(boxHeight.value.dp)
.fillMaxWidth(fraction = relBoxWidth.value)
.clip(RoundedCornerShape(8.dp))
.background(Color.Black)
.clickable { }
.pressIndicatorGestureFilter(
onStart = {
animateDimensions()
},
onStop = {
reverseAnimation()
},
onCancel = { …Run Code Online (Sandbox Code Playgroud) 默认情况下,Column {}具有其最大子元素的宽度。如何使所有其他元素适合父元素的宽度Column?如果我使用Modifier.fillMaxWidth()这些元素将占用整个可用空间并使父元素Column变大。我怎样才能实现与Modifier.matchParentWidth()Modifier 提供的相同的行为?
有没有办法添加滚动条来添加LazyColumn(ScrollableColumn已弃用)。Javadoc 没有提到有关 Jetpack Compose 中滚动条的任何内容。
澄清一下,这是我想要实现的设计:

甚至可以在 Jetpack Compose 中做到这一点吗?或者不支持滚动条?
有没有办法在Jetpack Compose ConstraintLayout 链中使用权重,就像在 XML 中一样:
\n<android.support.constraint.ConstraintLayout\n xmlns:android="http://schemas.android.com/apk/res/android"\n xmlns:app="http://schemas.android.com/apk/res-auto"\n android:layout_width="match_parent"\n android:layout_height="match_parent">\n\n <View\n android:id="@+id/first"\n android:layout_width="0dp"\n android:layout_height="48dp"\n android:background="#caf"\n app:layout_constraintLeft_toLeftOf="parent"\n app:layout_constraintRight_toLeftOf="@+id/start"\n app:layout_constraintHorizontal_weight="6"/>\n\n <View\n android:id="@+id/second"\n android:layout_width="0dp"\n android:layout_height="48dp"\n android:background="#fac"\n app:layout_constraintLeft_toRightOf="@+id/first"\n app:layout_constraintRight_toRightOf="parent"\n app:layout_constraintHorizontal_weight="4"/>\n\n</android.support.constraint.ConstraintLayout>\n\nRun Code Online (Sandbox Code Playgroud)\n目前,两者ConstraintLayoutScope都不ConstraintScope提供重量功能。ConstraintLayoutScope提供createHorizontalChain(vararg elements: ConstraintLayoutReference, chainStyle: ChainStyle)(或createVerticalChain分别)但没有为各个元素设置权重的选项。
有了指导方针、障碍和其他一切的整合,我觉得这里缺少一些重要的东西。有没有办法在链中使用权重或模拟它们的行为?我不能只为元素指定固定宽度,因为 ConstraintLayout 的宽度必须与整个屏幕匹配。
\n注意:据我了解,新的 Jetpack Compose ConstraintLayout 对于复杂的嵌套布局结构(如 Android View ConstraintLayout)没有性能优势。I\xe2\x80\x99m 也知道 Row 和 Column 提供权重功能,但在我的情况下我必须使用 ConstraintLayout (原因)
\n我的崩溃报告系统发现大约 4% 的设备发生崩溃。受影响的设备由 LG、三星或华为制造,运行 Android 6.0.1。我无法在运行 API 23 的测试设备上重现该问题。
例外情况:
Fatal Exception: java.lang.IllegalStateException: LayoutCoordinate operations are only valid when isAttached is true
at androidx.compose.ui.node.LayoutNodeWrapper.getParentLayoutCoordinates(LayoutNodeWrapper.kt:105)
at androidx.compose.ui.layout.LayoutCoordinatesKt.findRoot(LayoutCoordinates.kt:155)
at androidx.compose.ui.layout.LayoutCoordinatesKt.boundsInWindow(LayoutCoordinates.kt:120)
at androidx.compose.ui.semantics.SemanticsNode.getBoundsInWindow(SemanticsNode.kt:120)
at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat_androidKt.getAllUncoveredSemanticsNodesToMap$findAllSemanticNodesRecursive(AndroidComposeViewAccessibilityDelegateCompat.android.kt:2082)
at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat_androidKt.getAllUncoveredSemanticsNodesToMap$findAllSemanticNodesRecursive(AndroidComposeViewAccessibilityDelegateCompat.android.kt:2092)
at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat_androidKt.getAllUncoveredSemanticsNodesToMap(AndroidComposeViewAccessibilityDelegateCompat.android.kt:2098)
at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat_androidKt.getAllUncoveredSemanticsNodesToMap$default(AndroidComposeViewAccessibilityDelegateCompat.android.kt:2071)
at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat.getCurrentSemanticsNodes(AndroidComposeViewAccessibilityDelegateCompat.android.kt:176)
at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat.populateAccessibilityNodeInfoProperties(AndroidComposeViewAccessibilityDelegateCompat.android.kt:290)
at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat.createNodeInfo(AndroidComposeViewAccessibilityDelegateCompat.android.kt:247)
at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat.access$createNodeInfo(AndroidComposeViewAccessibilityDelegateCompat.android.kt:86)
at androidx.compose.ui.platform.AndroidComposeViewAccessibilityDelegateCompat$MyNodeProvider.createAccessibilityNodeInfo(AndroidComposeViewAccessibilityDelegateCompat.android.kt:1996)
at android.view.View.createAccessibilityNodeInfoInternal(View.java:6040)
at android.view.View$AccessibilityDelegate.createAccessibilityNodeInfo(View.java:22287)
at android.view.View.createAccessibilityNodeInfo(View.java:6026)
at android.view.accessibility.AccessibilityRecord.setSource(AccessibilityRecord.java:145)
at android.view.accessibility.AccessibilityRecord.setSource(AccessibilityRecord.java:119)
at android.view.View.onInitializeAccessibilityEventInternal(View.java:5980)
at android.view.View$AccessibilityDelegate.onInitializeAccessibilityEvent(View.java:22199)
at androidx.core.view.AccessibilityDelegateCompat.onInitializeAccessibilityEvent(AccessibilityDelegateCompat.java:257)
at androidx.core.view.AccessibilityDelegateCompat$AccessibilityDelegateAdapter.onInitializeAccessibilityEvent(AccessibilityDelegateCompat.java:76)
at android.view.View.onInitializeAccessibilityEvent(View.java:5966)
at android.view.View.sendAccessibilityEventUncheckedInternal(View.java:5833)
at android.view.View$AccessibilityDelegate.sendAccessibilityEventUnchecked(View.java:22138)
at androidx.core.view.AccessibilityDelegateCompat.sendAccessibilityEventUnchecked(AccessibilityDelegateCompat.java:196)
at androidx.core.view.AccessibilityDelegateCompat$AccessibilityDelegateAdapter.sendAccessibilityEventUnchecked(AccessibilityDelegateCompat.java:113)
at android.view.View.sendAccessibilityEventUnchecked(View.java:5816)
at android.view.ViewRootImpl$SendWindowContentChangedAccessibilityEvent.run(ViewRootImpl.java:7154) …Run Code Online (Sandbox Code Playgroud)