Getting the size of the window WITHOUT title/notification bars
I've been playing around with Android development and one of the things I'd like to be able to do is dynamically create a background image for my windows, similar to the one below.
This is from my BlackBerry app. It consists of three separate parts, the bottom right logo, the top left watermark, and the bottom right name. It works independent of screen size because the BlackBerry app just gets all three parts and generates an appropriately sized bitmap using the screen width and height.
Since Android has quite a bit more screen resolution possibilities I need to be able to generate backgroun开发者_StackOverflow中文版ds on the fly like this. However, I have not found any way to get the height/width of the window in Android. I can get the screen resolution, but that includes the application title bar and the notification bar, which is unacceptable.
I'd like to know how to get the size of my window, or screen resolution minus the title and notification bars. I think this might be possible using the dimensions of my layout managers but I cannot get the height/width of them in the onCreate method so I'm not sure what to do exactly.
Thanks.
Use View.MeasureSpec.getSize method in onMeasure override.
@Override
protected void onMeasure (int widthMeasureSpec, int heightMeasureSpec)
{
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
int width = MeasureSpec.getSize(widthMeasureSpec);
int height = MeasureSpec.getSize(heightMeasureSpec);
...
}
I have a tutorial on my blog that give you the ability to save your screen size on launch, You can read it here: http://evgeni-shafran.blogspot.com/2011/01/android-screen-size-problem.html
Basicly you need to overide an onMeasure method of the first layout that hold you full screen, and get the width and height from there
have a look at getwidth() and getheight() maybe? that should give you the size of the screen. though, I don't know If it takes the bars or not. But I don't think so...
in the first onDraw, call getWidth, getHeight. these will not be valid before then.
if you are not using a custom view/layout then you can instead call getWidth/getHeight during the first onWindowFocusChanged
To accomplish this in my app, I had to find a View's dimensions within the main Activity. It looked something like this:
@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();
}
精彩评论