Подтвердить что ты не робот

Получение размера окна БЕЗ заголовков/уведомлений

Я играл с Android-разработкой, и я хотел бы уметь динамически создавать фоновое изображение для моих окон, как показано ниже.

alt text

Это из моего приложения BlackBerry. Он состоит из трех отдельных частей: нижнего правого логотипа, верхнего левого водяного знака и нижнего правого имени. Он работает независимо от размера экрана, потому что приложение BlackBerry просто получает все три части и генерирует растровое изображение соответствующего размера, используя ширину и высоту экрана.

Поскольку у Android гораздо больше возможностей разрешения экрана, мне нужно иметь возможность создавать фоновые изображения на лету, как это. Однако я не нашел способа получить высоту/ширину окна в Android. Я могу получить разрешение экрана, но это включает в себя строку заголовка приложения и панель уведомлений, что недопустимо.

Я хотел бы знать, как получить размер моего окна или разрешение экрана за вычетом заголовка и панелей уведомлений. Я думаю, что это возможно, используя размеры моих менеджеров компоновки, но я не могу получить их высоту/ширину в методе onCreate, поэтому я не уверен, что именно делать.

Благодарю.

4b9b3361

Ответ 1

Используйте метод View.MeasureSpec.getSize в onMeasure переопределить.

    @Override
protected void onMeasure (int widthMeasureSpec, int heightMeasureSpec)
{
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    int width = MeasureSpec.getSize(widthMeasureSpec);
    int height = MeasureSpec.getSize(heightMeasureSpec);
    ...
}

Ответ 2

У меня есть учебник по моему блогу, который дает вам возможность сохранять размер экрана при запуске, Вы можете прочитать это здесь: http://evgeni-shafran.blogspot.com/2011/01/android-screen-size-problem.html

В основном вам нужно переопределить метод onMeasure первого макета, который удерживает вас на весь экран, и получить оттуда ширину и высоту

Ответ 3

Посмотрите на getwidth() и getheight(), возможно? что должно дать вам размер экрана. хотя, я не знаю, если это берет бары или нет. Но я так не думаю...

Ответ 4

в первом onDraw, вызовите getWidth, getHeight. они не будут действительны до этого.

если вы не используете пользовательский вид/макет, вместо этого вы можете вместо этого вызвать getWidth/getHeight во время первого onWindowFocusChanged

Ответ 5

Чтобы выполнить это в своем приложении, мне пришлось найти размеры View в основной деятельности. Это выглядело примерно так:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    gestureScanner = new GestureDetector(this);   //Object for handling gestures.

    mvView = new MyView(this);  //MyView is class that extends View.
    setContentView(myView);
}

@Override
public void onShowPress(MotionEvent e) {

    //Returns the size of the entire window, including status bar and title.
    DisplayMetrics dm = new DisplayMetrics();
    this.getWindowManager().getDefaultDisplay().getMetrics(dm);

    //Try to find the dimension of the view without the status/title bars.
    int iViewHeight = mvMountain.getHeight();
    int iViewWidth = mvMountain.getWidth();


    Toast toast = Toast.makeText(this," View:" + iViewWidth + ","+iViewHeight + " Window: " + dm.widthPixels + " by " + dm.heightPixels, 2);
    toast.show();
}