Получение размера окна БЕЗ заголовков/уведомлений
Я играл с Android-разработкой, и я хотел бы уметь динамически создавать фоновое изображение для моих окон, как показано ниже.
![alt text]()
Это из моего приложения BlackBerry. Он состоит из трех отдельных частей: нижнего правого логотипа, верхнего левого водяного знака и нижнего правого имени. Он работает независимо от размера экрана, потому что приложение BlackBerry просто получает все три части и генерирует растровое изображение соответствующего размера, используя ширину и высоту экрана.
Поскольку у Android гораздо больше возможностей разрешения экрана, мне нужно иметь возможность создавать фоновые изображения на лету, как это. Однако я не нашел способа получить высоту/ширину окна в Android. Я могу получить разрешение экрана, но это включает в себя строку заголовка приложения и панель уведомлений, что недопустимо.
Я хотел бы знать, как получить размер моего окна или разрешение экрана за вычетом заголовка и панелей уведомлений. Я думаю, что это возможно, используя размеры моих менеджеров компоновки, но я не могу получить их высоту/ширину в методе onCreate, поэтому я не уверен, что именно делать.
Благодарю.
Ответы
Ответ 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();
}