gpt4 book ai didi

android - 在 17 岁以上的 Android API 中, "getTextDirection()"有什么替代方案?

转载 作者:行者123 更新时间:2023-11-29 20:42:21 30 4
gpt4 key购买 nike

在 Android 应用程序中,我们希望有一个类似 iOS 的水平滚轮,我们正在使用 HorizontalPicker .

这需要 API 17 来调用 getTextDirection()getLayoutDirection()

对于getTextDirection,用法是:

        switch (getTextDirection()) {
default:
case TEXT_DIRECTION_FIRST_STRONG:
return (defaultIsRtl ? TextDirectionHeuristicsCompat.FIRSTSTRONG_RTL :
TextDirectionHeuristicsCompat.FIRSTSTRONG_LTR);
case TEXT_DIRECTION_ANY_RTL:
return TextDirectionHeuristicsCompat.ANYRTL_LTR;
case TEXT_DIRECTION_LTR:
return TextDirectionHeuristicsCompat.LTR;
case TEXT_DIRECTION_RTL:
return TextDirectionHeuristicsCompat.RTL;
case TEXT_DIRECTION_LOCALE:
return TextDirectionHeuristicsCompat.LOCALE;
}

查看仪表板,我看到约 20% 的设备使用 API 15 或 16,因此我认为我们应该以 API 15 而不是 17 为目标。

我应该如何更改此代码?

  1. 有没有办法只在设备足够新的情况下运行这段代码?如果是这样,该函数应该为旧设备返回什么?

  2. 是否有我应该重写此方法以使用的替代机制?

最佳答案

没关系。将此问题留在这里以防它对其他人有用,以了解如何解决给定版本中缺少的 API。

我真正的问题是不知道如何标记调用以便“lint”不会提示它们。

这是 Horizo​​ntalPicker 中的完整实现:​​

private TextDirectionHeuristicCompat getTextDirectionHeuristic() {

if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1) {

return TextDirectionHeuristicsCompat.FIRSTSTRONG_LTR;

} else {

// Always need to resolve layout direction first
final boolean defaultIsRtl = (getLayoutDirection() == LAYOUT_DIRECTION_RTL);

switch (getTextDirection()) {
default:
case TEXT_DIRECTION_FIRST_STRONG:
return (defaultIsRtl ? TextDirectionHeuristicsCompat.FIRSTSTRONG_RTL :
TextDirectionHeuristicsCompat.FIRSTSTRONG_LTR);
case TEXT_DIRECTION_ANY_RTL:
return TextDirectionHeuristicsCompat.ANYRTL_LTR;
case TEXT_DIRECTION_LTR:
return TextDirectionHeuristicsCompat.LTR;
case TEXT_DIRECTION_RTL:
return TextDirectionHeuristicsCompat.RTL;
case TEXT_DIRECTION_LOCALE:
return TextDirectionHeuristicsCompat.LOCALE;
}
}
}

它已经具有处理旧版本的逻辑!

所以只需要标记 getLayoutDirection()getTextDirection() 这两个调用,这样 lint 就不会报错。

这样做最简单的方法是标记此方法以抑制对 API 版本的 lint 投诉,而不会将问题隐藏在其他地方:

@SuppressLint("NewApi")
private TextDirectionHeuristicCompat getTextDirectionHeuristic() {
...

注意:只有在检查 lint 投诉和逻辑以及您的 AndroidManifest.xml 之后,才能进行此类更改,以确保可以安全地忽略投诉。

在我的例子中, list 具有最小 API = 15 和目标 API = 19,两个投诉是“调用需要 API 级别 17,最小为 15)”,和

if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1) {

指示所有小于 17 的设备使用不使用 API 17 调用的单行实现。也就是说,调用只会在 API 17 或更高版本的设备上进行。

关于android - 在 17 岁以上的 Android API 中, "getTextDirection()"有什么替代方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30853029/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com