Метод getSize(Point) не определен для типа Display

Я пишу приложение для Android. Я хочу динамически собирать ширину экрана во время выполнения, чтобы рисовать диалоги в зависимости от размера экрана. Для этого я написал следующую функцию:

public static int getDisplayWidth( Context context )
{
    WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); 
    Display display = wm.getDefaultDisplay();
    int width = 0;
    if( android.os.Build.VERSION.SDK_INT >= 13 )
    {
        Point size = new Point();
        display.getSize(size); //Error
        width = size.x;
    }
    else
    {
        width = display.getWidth();
    }
    return width;
}

Но я получаю сообщение об ошибке в строке "display.getSize(size);"

Ошибка: "Метод getSize(Point) не определен для типа Display"

Я использую Ecslipe в качестве среды разработки.

Целью сборки проекта является "Android 2.3.3". В Manifest.xml я установил: <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="16" />

Может ли кто-нибудь сказать мне, почему я получаю эту ошибку? Что я сделал не так?

Сапп


person Sapp    schedule 03.08.2013    source источник
comment
Собирайте не с 2.3.3 (API 10), а с новейшей версией 18 и тестируйте ее на устройстве 2.3.3.   -  person Selvin    schedule 03.08.2013
comment
Я собираю его с 4.2.2, и он работает! Спасибо   -  person Sapp    schedule 03.08.2013


Ответы (1)


В более старых версиях Android нет метода getSize(). Ошибка либо вызывает, либо связывается с отсутствующей функцией.

private static Point getDisplaySize(final Display display) {
    final Point point = new Point();
    try {
        display.getSize(point);
    } catch (java.lang.NoSuchMethodError ignore) { // Older device
        point.x = display.getWidth();
        point.y = display.getHeight();
    }
    return point;
}

Поэкспериментируйте с try-catch и посмотрите, поможет ли это. Это должно безопасно вернуться к старому API и гарантировать, что ваш код работает на широком диапазоне устройств.

Действительно, немного шары со стороны Google.

Видеть:

person Thomas W    schedule 03.08.2013
comment
Нет, если необходимо вернуться к рабочей функциональности, @Selvin. Конечно, со стабильным API вам не нужна такая фигня. Но лучше иметь работающее приложение, чем красивую теорию. - person Thomas W; 03.08.2013
comment
Работающая функциональность должна выглядеть так: Интерфейс CompatHelper с методом getDisplaySize(final Display display)... Две реализации OlderHelper и PostHoneyHelper и средство выбора реализации на основе Build.VERSION.SDK_INT... Это должно быть построено с самым высоким API. Тогда вам не стоит беспокоиться об ошибках компиляции и выполнения... Так же, как это делается в библиотеке поддержки :-) - person Selvin; 03.08.2013