我的应用程序中有一个显示计时器的屏幕。如果用户决定增加设备设置菜单中的字体大小,则文本对于布局来说变得太大并且开始换行。对于我的其他文本较多的屏幕来说,这不是问题。对于此屏幕 - 并且仅此屏幕 - 如果使用辅助功能选项,我更愿意防止计时器文本大小增加。
如果添加了上下文,有问题的代码看起来像这样:
HorizontalPager(state = pagerState, dragEnabled = dragEnabled) { page ->
val timeInSeconds = abs(steps[page % steps.size] / 1000L)
val minutes = (timeInSeconds / 60).toString().padStart(2, '0')
val seconds = (timeInSeconds % 60).toString().padStart(2, '0')
Text(
modifier = Modifier.fillMaxWidth(0.85f),
text = stringResource(R.string.pomodoro_active_notification_content_body, minutes, seconds),
textAlign = TextAlign.Center,
fontSize = LocalDimens.current.intervalTimeFontSize,
style = MaterialTheme.typography.h1
)
}
Run Code Online (Sandbox Code Playgroud) 我收到了大量关于我的应用程序抛出异常的 Crashlytics 报告,但我自己从未见过这种情况,而且我正在努力了解它来自哪里。
我的运行理论是,它与我拥有的 Firebase Auth 依赖项有关 - 但该依赖项尚未被积极使用。我的生产应用程序已禁用整个注册和登录流程。生产代码中使用的库的唯一两个实例是:
// Inside Activity.onCreate()
Firebase.auth.addAuthStateListener {
val user = it.currentUser
if (user != null) {
Firebase.analytics.setUserId(user.uid)
CoroutineScope(Dispatchers.IO).launch {
registerDeviceToken(applicationContext)
}
} else {
Firebase.analytics.setUserId(null)
Firebase.messaging.deleteToken()
}
}
Run Code Online (Sandbox Code Playgroud)
和:
// Called from Activity.onStart()
fun hasPendingMagicLink(intent: Intent): Boolean {
val emailAddress = getMagicLinkEmailAddress()
return emailAddress != null
&& Firebase.auth.currentUser == null
&& Firebase.auth.isSignInWithEmailLink(intent.data.toString())
}
Run Code Online (Sandbox Code Playgroud)
我在下面列出了 Crashlytics 报告。
致命异常:java.lang.RuntimeException
无法启动活动 ComponentInfo{com.poliziano.notanotherpomodoroapp/com.google.android.gms.auth.api.signin.internal.SignInHubActivity}:java.lang.NullPointerException android.app.ActivityThread.performLaunchActivity
Fatal Exception: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.poliziano.notanotherpomodoroapp/com.google.android.gms.auth.api.signin.internal.SignInHubActivity}: java.lang.NullPointerException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2778)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2856) …Run Code Online (Sandbox Code Playgroud) 我有一个Column有两个孩子的垂直项目:
Pager可组合项(来自伴奏者),显示Text.Canvas绘制两个圆弧和一个圆的可组合项。它们的排序顺序与此处描述的顺序相同。我希望Text始终渲染在Canvas.
可组合项Canvas具有Modifier.pointerInteropFilter处理MotionEvent.ACTION_DOWN和 的MotionEvent.ACTION_MOVE。如果事件不在弧的 10% 距离内,则忽略并false返回该事件。
我的理解是返回false将表明该事件尚未被消耗,因此将被传递以进行Pager处理 - 但事实并非如此。一旦Modifier.pointerInteropFilter被注册, 就Pager永远不会接收输入事件,无论返回true或false。
为了简洁起见,下面是我当前实现的简化版本。我有一个Column渲染第Pager一个,然后渲染Canvas.
Column(
modifier = Modifier.fillMaxSize(),
verticalArrangement = Arrangement.Center
) {
// The Pager should always be rendered behind the Canvas. This is to
// prevent …Run Code Online (Sandbox Code Playgroud)