Получение размера окна БЕЗ заголовка / панели уведомлений - PullRequest
19 голосов
/ 21 марта 2010

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

alt text

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

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

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

Спасибо.

Ответы [ 5 ]

18 голосов
/ 09 июля 2010

Использование 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);
    ...
}
1 голос
/ 02 августа 2011

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

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

0 голосов
/ 24 марта 2010

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

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

0 голосов
/ 31 марта 2010

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

@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();
}
0 голосов
/ 21 марта 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...