小编Pol*_*ano的帖子

当设备字体大小增加时,防止 Jetpack Compose 中的文本放大

我的应用程序中有一个显示计时器的屏幕。如果用户决定增加设备设置菜单中的字体大小,则文本对于布局来说变得太大并且开始换行。对于我的其他文本较多的屏幕来说,这不是问题。对于此屏幕 - 并且仅此屏幕 - 如果使用辅助功能选项,我更愿意防止计时器文本大小增加。

格式良好的撰写页面 设备字体设置 撰写页面格式不正确

如果添加了上下文,有问题的代码看起来像这样:

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)

android kotlin android-jetpack-compose

18
推荐指数
2
解决办法
8167
查看次数

java.lang.RuntimeException:无法启动活动 ComponentInfo{<package-name>/com.google.android.gms.auth.api.signin.internal.SignInHubActivity}

我收到了大量关于我的应用程序抛出异常的 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)

android

17
推荐指数
0
解决办法
2159
查看次数

停止 Jetpack Compose pointInteropFilter 消耗输入事件

我有一个Column有两个孩子的垂直项目:

  1. 一个Pager可组合项(来自伴奏者),显示Text.
  2. Canvas绘制两个圆弧和一个圆的可组合项。

它们的排序顺序与此处描述的顺序相同。我希望Text始终渲染在Canvas.


实施细节

可组合项Canvas具有Modifier.pointerInteropFilter处理MotionEvent.ACTION_DOWN和 的MotionEvent.ACTION_MOVE。如果事件不在弧的 10% 距离内,则忽略并false返回该事件。

我的理解是返回false将表明该事件尚未被消耗,因此将被传递以进行Pager处理 - 但事实并非如此。一旦Modifier.pointerInteropFilter被注册, 就Pager永远不会接收输入事件,无论返回truefalse


布局

为了简洁起见,下面是我当前实现的简化版本。我有一个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)

android kotlin android-jetpack android-jetpack-compose

9
推荐指数
1
解决办法
2456
查看次数