val pullRefreshState = rememberPullRefreshState(loadStatus is LoadState.Loading, onRefresh = {
photosResponse.refresh()
})
Box(
modifier
.fillMaxSize()
.pullRefresh(pullRefreshState)
Run Code Online (Sandbox Code Playgroud)
我已将材料 2 更新为材料 3:
api(libs.androidx.compose.material3) // group = "androidx.compose.material3", name = "material3"
Run Code Online (Sandbox Code Playgroud)
但现在无法使用滑动刷新,没有任何东西可以导入
android android-jetpack-compose android-jetpack-compose-material3
我正在尝试在 UIViewController 底部添加一个 Admob 横幅:
func addBannerViewToView() {
bannerView = GADBannerView(adSize: kGADAdSizeBanner)
bannerView.adUnitID = "ca-app-pub-HIDDEN/HIDDEN"
bannerView.rootViewController = self
bannerView.delegate = self
bannerView.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(bannerView)
view.addConstraints(
[NSLayoutConstraint(item: bannerView,
attribute: .bottom,
relatedBy: .equal,
toItem: view.safeAreaLayoutGuide.bottomAnchor,
attribute: .top,
multiplier: 1,
constant: 0),
NSLayoutConstraint(item: bannerView,
attribute: .centerX,
relatedBy: .equal,
toItem: view,
attribute: .centerX,
multiplier: 1,
constant: 0)
])
bannerView.load(GADRequest())
}
Run Code Online (Sandbox Code Playgroud)
我调用了这个函数,viewDidLoad但应用程序崩溃了:
由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“NSLayoutConstraint for >:每个约束项都必须是视图或布局指南。”
这是什么意思?
我尝试更改ext.kotlin_version = '1.5.0'为,ext.kotlin_version = '1.5.0-release-764'
但在这种情况下,gradle 项目无法构建Could not find org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.0-release-764.
更新 ext.kotlin_version = '1.5.0'- 也不起作用,同样的错误和警告
构建.gradle:
buildscript {
ext.kotlin_version = '1.5.0'
repositories {
google()
}
dependencies {
classpath 'com.android.tools.build:gradle:4.2.0'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
allprojects {
repositories {
google()
}
}
Run Code Online (Sandbox Code Playgroud)
gradle-wrapper.properties:
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-6.7.1-all.zip
Run Code Online (Sandbox Code Playgroud)
无法解析配置 ':classpath' 的所有工件。找不到 org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.0。在以下位置搜索: - https://dl.google.com/dl/android/maven2/org/jetbrains/kotlin/kotlin-gradle-plugin/1.5.0/kotlin-gradle-plugin-1.5.0.pom 如果您尝试检索的工件可以在存储库中找到,但没有 'Maven POM' 格式的元数据,则需要调整存储库声明的 'metadataSources { ... }'。
更新 2
我不得不添加mavenCentral()以使其工作,虽然警告仍然存在但它构建
如果 4.2 版本在更新一个依赖项的版本后在“项目结构”窗口中无限加载建议,那么另一个问题
(1 个屏幕截图 - ImageView 可见性可见,2 个屏幕截图 - 消失)
使用ImageViewwith时,CardView我们可以说阴影根本不可见(尤其是在智能手机显示屏上)
<android.support.v7.widget.CardView
android:id="@+id/ImageViewWrapper"
android:layout_width="0dp"
android:layout_height="0dp"
android:elevation="0dp"
android:layout_margin="10dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:cardCornerRadius="6dp">
<android.support.v7.widget.AppCompatImageView
android:id="@+id/ImageView"
android:visibility="visible"
android:background="@color/black_1000"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center_vertical"
app:srcCompat="@drawable/ic_folder"/>
</android.support.v7.widget.CardView>
Run Code Online (Sandbox Code Playgroud)
android:elevation 没有任何影响(0dp、5dp 或 20dp - 没有任何变化),所以我只是将其设置为 0dp
我们可以控制这个cardview shadow,让它更强/更大/更厚吗?
3 屏幕截图 - 这里是视频缩略图 ImageView 的 MX Player 应用示例(https://play.google.com/store/apps/details?id=com.mxtech.videoplayer.ad)
更新
我设置 app:cardElevation="7dp"
并app:cardUseCompatPadding="true"
没有进展......cardUseCompatPadding并使我的图像高度变小,现在我的左/右有黑条
我检查了此信息https://developer.android.com/jetpack/compose/libraries#hilt-navigation如何注入ViewModel撰写屏幕。
现在我为我的测试应用程序实现了这样的:
NavHost(
navController = navController,
startDestination = startDestination,
modifier = modifier
) {
composable(Screen.Topics.name) {
val parentEntry = remember { navController.getBackStackEntry(Screen.Topics.name) }
val topicsViewModel = hiltViewModel<TopicsViewModel>(parentEntry)
TopicsScreen(
topicsViewModel = topicsViewModel,
openDrawer = openDrawer,
navigateToTopicDetails = { topic -> actions.navigateToTopicsDetails(topic) }
)
}
...
Run Code Online (Sandbox Code Playgroud)
如果我使用会有什么不同吗
val parentEntry = remember { navController.getBackStackEntry(Screen.Topics.name) }
val topicsViewModel = hiltViewModel<TopicsViewModel>(parentEntry)
Run Code Online (Sandbox Code Playgroud)
要不就
val topicsViewModel = hiltViewModel<TopicsViewModel>()
Run Code Online (Sandbox Code Playgroud)
我想只有当我们使用嵌套图并且我们想要获取特定图范围的 ViewModel 时才需要第一个https://developer.android.com/jetpack/compose/navigation#nested-nav
因此,在我的情况下,如果我不使用嵌套图,两种方法的范围是相同的?
那么我可以只用hiltViewModel<TopicsViewModel>()在我的情况下吗?
android android-jetpack-compose dagger-hilt jetpack-compose-navigation
这里我比较了Android内置方法来格式化文件和自定义来自/sf/answers/391988971/
\nTimber.d(\n "Format file size using Formatter.formatFileSize " +\n "${Formatter.formatFileSize(this, 1_000_000_000L)}, " +\n "${Formatter.formatFileSize(this, 1_073_741_824L)}"\n)\n\nTimber.d(\n "Format file size using readableFileSize " +\n "${readableFileSize(1_000_000_000L)}, " +\n "${readableFileSize(1_073_741_824L)}"\n)\nRun Code Online (Sandbox Code Playgroud)\n。
\nfun readableFileSize(size: Long): String? {\n if (size <= 0) return "0"\n val units = arrayOf("B", "kB", "MB", "GB", "TB")\n val digitGroups = (log10(size.toDouble()) / log10(1024.0)).toInt()\n return DecimalFormat("#,##0.#").format(size / 1024.0.pow(digitGroups.toDouble()))\n .toString() + " " + units[digitGroups]\n}\nRun Code Online (Sandbox Code Playgroud)\n这是结果:
\nFormat file size using Formatter.formatFileSize 1,00\xc2\xa0GB, 1,07\xc2\xa0GB\nFormat file size using readableFileSize …Run Code Online (Sandbox Code Playgroud) private fun getReferralId() {
Firebase.dynamicLinks
.getDynamicLink(intent)
.addOnSuccessListener(this) { pendingDynamicLinkData ->
pendingDynamicLinkData?.link?.getQueryParameter(
DEEP_LINK_QUERY_PARAM_REFERRAL_ID
)?.let { refId ->
viewModel.saveReferralId(refId)
}
}
}
Run Code Online (Sandbox Code Playgroud)
java.lang.NullPointerException:指定为非空的参数为空:方法kotlin.jvm.internal.Intrinsics.checkNotNullParameter,参数pendingDynamicLinkData位于app.package.activity.MainActivity.getReferralId$lambda-2(未知来源:7)在应用程序.package.activity.MainActivity.$r8$lambda$ANLS0uCuXrQe7RFQ5b0C-RFsBKE(未知来源:0)在app.package.activity.MainActivity$$ExternalSyntheticLambda3.onSuccess(未知来源:4)
版本:
implementation platform("com.google.firebase:firebase-bom:28.3.1")
implementation "com.google.firebase:firebase-dynamic-links-ktx"
Run Code Online (Sandbox Code Playgroud)
这里有什么问题吗?
更新
当我更新 play-services-auth 库的版本时会发生这种情况
implementation "com.google.android.gms:play-services-auth:19.2.0"
implementation "com.google.android.gms:play-services-auth-api-phone:17.5.1"
Run Code Online (Sandbox Code Playgroud)
到最新版本
implementation "com.google.android.gms:play-services-auth:20.0.0"
implementation "com.google.android.gms:play-services-auth-api-phone:18.0.0"
Run Code Online (Sandbox Code Playgroud)
这有什么关系呢?
我正在将扩展从清单 2 迁移到清单 3。
有时我会收到以下错误:
未捕获的类型错误:无法读取未定义的属性(读取“本地”)
在这样的线上
chrome.storage.local.get('timeSync', function(result) {
timeSync = result.timeSync;
});
Run Code Online (Sandbox Code Playgroud)
我的content_script.js
还有其他无意义的错误(也只是有时发生,mb 仅在 chrome://extensions/ 重新加载扩展时发生,我不确定):
java.lang.RuntimeException: Unable to invoke no-args constructor for class com.arch.example.network.models.NetworkPagingList. Registering an InstanceCreator with Gson for this type may fix this problem.\n at com.google.gson.internal.ConstructorConstructor$14.construct(ConstructorConstructor.java:228)\n at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:212)\n at retrofit2.converter.gson.GsonResponseBodyConverter.convert(GsonResponseBodyConverter.java:40)\n at retrofit2.converter.gson.GsonResponseBodyConverter.convert(GsonResponseBodyConverter.java:27)\n at retrofit2.OkHttpCall.parseResponse(OkHttpCall.java:243)\n at retrofit2.OkHttpCall$1.onResponse(OkHttpCall.java:153)\n at okhttp3.internal.connection.RealCall$AsyncCall.run(RealCall.kt:519)\n at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1137)\n at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:637)\n at java.lang.Thread.run(Thread.java:1012)\n Caused by: java.lang.UnsupportedOperationException: Abstract class can't be instantiated! Class name: com.arch.example.network.models.NetworkPagingList\n at com.google.gson.internal.UnsafeAllocator.assertInstantiable(UnsafeAllocator.java:120)\n at com.google.gson.internal.UnsafeAllocator$1.newInstance(UnsafeAllocator.java:49)\n at com.google.gson.internal.ConstructorConstructor$14.construct(ConstructorConstructor.java:225)\n at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:212)\xc2\xa0\n at retrofit2.converter.gson.GsonResponseBodyConverter.convert(GsonResponseBodyConverter.java:40)\xc2\xa0\n at retrofit2.converter.gson.GsonResponseBodyConverter.convert(GsonResponseBodyConverter.java:27)\xc2\xa0\n at retrofit2.OkHttpCall.parseResponse(OkHttpCall.java:243)\xc2\xa0\n at retrofit2.OkHttpCall$1.onResponse(OkHttpCall.java:153)\xc2\xa0\n at okhttp3.internal.connection.RealCall$AsyncCall.run(RealCall.kt:519)\xc2\xa0\n at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1137)\xc2\xa0\n at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:637)\xc2\xa0\n at java.lang.Thread.run(Thread.java:1012)\xc2\xa0\nRun Code Online (Sandbox Code Playgroud)\n实体:
\nimport …Run Code Online (Sandbox Code Playgroud) android ×6
admob ×1
android-jetpack-compose-material3 ×1
android-r8 ×1
chrome-extension-manifest-v3 ×1
dagger-hilt ×1
firebase ×1
gson ×1
ios ×1