【问题标题】:Call requires API level 14 (current min is 8): android.view.ViewGroup#canScrollHorizontally调用需要 API 级别 14(当前最低为 8):android.view.ViewGroup#canScrollHorizo​​ntally
【发布时间】:2014-10-03 08:41:56
【问题描述】:

我收到此错误:

调用需要 API 级别 14(当前最低为 8): android.view.ViewGroup#canScrollHorizo​​ntally。

如何在 14 岁之前的 API 级别解决这个问题?

public class ViewPagerEx extends ViewGroup{
    @Override
    public boolean performAccessibilityAction(View host, int action, Bundle args) {
        if (super.performAccessibilityAction(host, action, args)) {
            return true;
        }
        switch (action) {
            case AccessibilityNodeInfoCompat.ACTION_SCROLL_FORWARD: {
                if (canScrollHorizontally(1)) {
                    setCurrentItem(mCurItem + 1);
                    return true;
                }
            } return false;
            case AccessibilityNodeInfoCompat.ACTION_SCROLL_BACKWARD: {
                if (canScrollHorizontally(-1)) {
                    setCurrentItem(mCurItem - 1);
                    return true;
                }
            } return false;
        }
        return false;
    }

    public boolean canScrollHorizontally(int direction) {
        if (mAdapter == null) {
            return false;
        }
        final int width = getClientWidth();
        final int scrollX = getScrollX();
        if (direction < 0) {
            return (scrollX > (int) (width * mFirstOffset));
        } else if (direction > 0) {
            return (scrollX < (int) (width * mLastOffset));
        } else {
            return false;
        }
    }
}

【问题讨论】:

  • 这取决于你是否要支持更新的安卓手机,你可以将你的 api 级别提高到 14...否则你必须找到另一个替代你想做的事情,这只是一个建议
  • 不清楚是写了canScrollHorizo​​tnally方法还是想使用框架提供的方法

标签: android viewgroup android-version


【解决方案1】:

来自@KenWolf 的建议:使用support-v4 库,您可以使用ViewCompat 来检查:

// From within the View itself, just invoke the ViewCompat
// implementation with 'this' as the View parameter.
if (ViewCompat.canScrollHorizontally(this, 1)) {
    // ...
}

【讨论】:

    【解决方案2】:

    AndroidManifest.xml你会找到这样的代码:

    `<uses-sdk
        android:minSdkVersion="14"
        android:targetSdkVersion="19" />`
    

    android:minSdkVersion 是您所寻找的,我的意思是您的应用将在具有相同 API 级别的设备上运行。

    android:targetSdkVersion 是您的应用旨在运行的 API 级别。

    android:maxSdkVersion 是您的应用可以使用的最高 API 级别。

    意味着您的应用可以在android:minSdkVersionandroid:maxSdkVersion 之间的设备上运行

    所以您要做的就是将您的 API 级别从 8 更改为 14 以支持 android.view.ViewGroup#canScrollHorizontally.,因为它是在级别 14 中添加的。

    考虑到降低 android:minSdkVersion 将支持更多的 android 设备,但您将无法使用更高 API 级别中引入的方法。

    更多信息check this detailed description

    额外信息:

    1. kitkat 24.5%(API 级别 19)
    2. 果冻豆 53.8%(API 级别 16、17、18)
    3. 冰淇淋三明治 9.6%(API 级别 15)
    4. 姜饼 11.4%(API 级别 10)
    5. FROYO 0.7%(API 8 级)

    0.7% ???在设置 android:minSdkVersion="8" 之前你可能会三思而后行

    【讨论】:

    • 我认为您将 targetSdkVersion 与 maxSdkVersion 属性混淆了。您可能想再次检查该链接:)
    • 这个答案具有误导性。首先,如上所述,targetSdkVersion不是您的应用可以运行的最高 API 版本。其次,降低 minSDK不会让您失去功能。您可以使用它们仍然编码。但是,您需要做的是注意不要在没有这些 API 的设备上调用它们。但是说“您将失去在更高 API 级别中添加的高级功能”是错误的。。这是错误的。
    • @Chilledrat 确切地说,我怎么没有注意到,我会编辑我的答案。谢谢:)
    • @david-cesarino 首先这是一个误解,我将编辑我的答案。第二,正如您所说:“注意不要在没有它们的设备上调用所述 API”,我认为最好使用`targetSdkVersion`,而不是使用库或强制转换或任何其他可用于避免此类情况的方法错误,因为他无法控制用户可能会做什么。至于“您将失去在更高 API 级别中添加的高级功能”,我会更正它。我的英语不是那么流利,所以不用担心,人们已经明白我的意思了:)
    • @HasanNahhal 好的。我很满意。
    【解决方案3】:

    试试这个: 尝试将本地方法名称更改为其他名称,然后调用它。 例如,将其更改为 canScrollHorizo​​ntallyLocal() 等您调用它的位置。 ViewGroup 有一个这样命名的方法,它可能会尝试使用 super 方法而不是您的方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-17
      • 2015-01-15
      • 1970-01-01
      • 2016-12-20
      • 2012-09-14
      相关资源
      最近更新 更多