调用需要API级别14(当前最小值为8):android.view.ViewGroup#canscroll

调用需要API级别14(当前最小值为8):android.view.ViewGroup#canscroll,android,viewgroup,android-version,Android,Viewgroup,Android Version,我得到这个错误: 调用需要API级别14(当前最小值为8): android.view.ViewGroup可以水平滚动 如何在API级别14之前解决此问题 public class ViewPagerEx extends ViewGroup{ @Override public boolean performAccessibilityAction(View host, int action, Bundle args) { if (super.performAcces

我得到这个错误:

调用需要API级别14(当前最小值为8): android.view.ViewGroup可以水平滚动

如何在API级别14之前解决此问题

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;
        }
    }
}
public类ViewPagerEx扩展了ViewGroup{
@凌驾
公共布尔performAccessibilityAction(查看主机、int操作、捆绑参数){
if(super.performAccessibilityAction(主机、操作、参数)){
返回true;
}
开关(动作){
案例可访问性NodeInfoCompat.ACTION\u向前滚动\u:{
如果(1){
setCurrentItem(mCurItem+1);
返回true;
}
}返回false;
案例可访问性NodeInfoCompat.ACTION\u向后滚动\u:{
如果(可以水平滚动(-1)){
setCurrentItem(mCurItem-1);
返回true;
}
}返回false;
}
返回false;
}
公共布尔值可水平滚动(int方向){
if(mAdapter==null){
返回false;
}
final int width=getClientWidth();
final int scrollX=getScrollX();
如果(方向<0){
返回(scrollX>(int)(宽度*mFirstOffset));
}否则,如果(方向>0){
返回(scrollX<(int)(宽度*最大偏移量));
}否则{
返回false;
}
}
}

转到
AndroidManifest.xml
您会发现这样的代码:

`<uses-sdk
    android:minSdkVersion="14"
    android:targetSdkVersion="19" />`
``
android:minSdkVersion
是你想要的,我的意思是你的应用程序将在具有相同API级别的设备上运行

android:targetSdkVersion
是应用程序设计用于工作的API级别

android:maxSdkVersion
是应用程序可以使用的最高API级别

意味着您的应用程序可以在
android:minSdkVersion
android:maxSdkVersion

因此,您需要做的是将API级别从8更改为14,以支持
android.view.ViewGroup#水平滚动。
,因为它是在级别14中添加的

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

更多信息

额外信息:

  • kitkat 24.5%(API等级19)
  • 果冻豆53.8%(API等级16,17,18)
  • 冰淇淋三明治9.6%(API等级15)
  • 姜饼11.4%(API 10级)
  • FROYO 0.7%(API 8级)
  • 0.7%???在设置android:minSdkVersion=“8”

    之前,您可能会三思而后行尝试一下: 尝试将本地方法名称更改为其他名称,然后调用它。
    例如,将其更改为canScrollHorizontallyLocal(),并在您调用它的位置进行更改。ViewGroup有一个名为那样的方法,它可能正在尝试超级方法而不是您的方法。

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

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

    使用支持库:,int)这取决于你,如果你想支持更新的android手机,你可以将api级别提高到14级……否则你必须找到另一种替代方案,这只是一个建议不清楚您是编写了一个名为canScrollHorizotnally的方法,还是希望使用Framework提供的方法我认为您混淆了targetSdkVersion和maxSdkVersion属性。您可能需要再次检查该链接:)此答案具有误导性。首先,如前所述,targetSdkVersion不是应用程序可以运行的最高API版本。其次,降低minSDK不会使您失去功能。您仍然可以使用它们编写代码。然而,您需要做的是注意不要在没有API的设备上调用这些API。但说“您将失去在更高API级别添加的高级功能”是错误的。“那是错误的。”奇莱德说,没错,我怎么没注意到,我将编辑我的答案。谢谢:)@david cesarino首先这是一个误解,我将编辑我的答案。第二,正如您所说:“注意不要在没有API的设备上调用这些API”,我认为最好使用“targetSdkVersion”,而不是使用库或强制转换或任何其他可以用来避免此类错误的方法,因为他无法控制用户可以做什么。至于“您将失去在更高API级别中添加的高级功能”,我将纠正它。我的英语不是很流利,所以不用担心,人们已经理解了我的意思:)@HasanNahhal OK。我很满意。