Для вызова требуется уровень API 14 (текущий минимум 8): android.view.ViewGroup#canScrollHorizontally

Я получаю эту ошибку:

Для вызова требуется уровень API 14 (текущий минимум 8): android.view.ViewGroup#canScrollHorizontally.

Как я могу решить это на уровне 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;
        }
    }
}

person ishq    schedule 03.10.2014    source источник
comment
Используйте библиотеку поддержки: разработчик .android.com/reference/android/support/v4/view/, внутренний)   -  person Ken Wolf    schedule 03.10.2014
comment
это зависит от вас, если вы хотите поддерживать более новые телефоны Android, вы можете увеличить свой уровень API до 14 ... иначе вам придется найти другую альтернативу тому, что вы хотите сделать, это всего лишь предложение   -  person danidee    schedule 03.10.2014
comment
неясно, написали ли вы метод с именем canScrollHorizotnally или хотите использовать тот, который предоставляется фреймворком   -  person Blackbelt    schedule 03.10.2014


Ответы (3)


Из предложения @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)) {
    // ...
}
person Community    schedule 03.10.2014

перейдите к 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#canScrollHorizontally., поскольку он был добавлен на уровне 14.

примите во внимание, что снижение android:minSdkVersion будет поддерживать больше устройств Android, но вы не сможете использовать методы, представленные на более высоких уровнях API.

для получения дополнительной информации ознакомьтесь с этим подробным описанием

дополнительная информация:

  1. киткат 24,5% (уровень API 19)
  2. JELLYBEAN 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"

person Hassan Nahhal    schedule 03.10.2014
comment
Я думаю, вы путаете targetSdkVersion с атрибутом maxSdkVersion. Вы можете проверить эту ссылку еще раз :) - person Chilledrat; 03.10.2014
comment
Этот ответ вводит в заблуждение. Во-первых, как уже отмечалось, targetSdkVersion не является максимальной версией API, на которой может работать ваше приложение. Во-вторых, уменьшение minSDK не приводит к потере функциональности. Вы можете по-прежнему программировать, используя их. Однако вам нужно будет позаботиться о том, чтобы не вызывать указанные API на устройствах, на которых их нет. Но неверно говорить, что вы потеряете дополнительные функции, добавленные в API более высокого уровня. Это не правильно. - person davidcesarino; 03.10.2014
comment
@Chilledrat точно, как я этого не заметил, я отредактирую свой ответ. Благодарность :) - person Hassan Nahhal; 04.10.2014
comment
@ david-cesarino, сначала это было заблуждение, я отредактирую свой ответ. во-вторых, как вы сказали: позаботьтесь о том, чтобы не вызывать указанные API-интерфейсы на устройствах, на которых их нет, я думаю, что лучше использовать `targetSdkVersion`, а не использовать библиотеку или приведение или любые другие средства, которые можно использовать, чтобы избежать такой ошибки, так как он не может контролировать то, что может делать пользователь. что касается вас, вы потеряете расширенную функциональность, добавленную на более высоких уровнях API, я это исправлю. Я не так свободно говорю по-английски, так что не беспокойтесь, люди уже поняли, что я имею в виду :) - person Hassan Nahhal; 04.10.2014
comment
@HasanNahhal Хорошо. Я удовлетворен. - person davidcesarino; 04.10.2014

Попробуйте это: попробуйте изменить имя локального метода на что-то другое и вызовите его. Например, измените его на canScrollHorizontallyLocal() и так, где вы его вызываете. У ViewGroup есть метод с таким именем, и он может использовать метод super вместо вашего.

person soynerdito    schedule 03.10.2014