Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/216.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 获取没有标题/通知栏的窗口大小_Android_User Interface - Fatal编程技术网

Android 获取没有标题/通知栏的窗口大小

Android 获取没有标题/通知栏的窗口大小,android,user-interface,Android,User Interface,我一直在玩Android开发,我希望能够做的一件事是为我的windows动态创建一个背景图像,类似于下面的一个 这是从我的黑莓应用程序。它由三个独立的部分组成:右下角徽标、左上角水印和右下角名称。它的工作原理与屏幕大小无关,因为BlackBerry应用程序仅获取所有三个部分,并使用屏幕宽度和高度生成适当大小的位图 由于Android有更多的屏幕分辨率的可能性,我需要能够像这样动态生成背景。然而,我还没有找到任何方法来获得Android中窗口的高度/宽度。我可以获得屏幕分辨率,但其中包括应用程

我一直在玩Android开发,我希望能够做的一件事是为我的windows动态创建一个背景图像,类似于下面的一个

这是从我的黑莓应用程序。它由三个独立的部分组成:右下角徽标、左上角水印和右下角名称。它的工作原理与屏幕大小无关,因为BlackBerry应用程序仅获取所有三个部分,并使用屏幕宽度和高度生成适当大小的位图

由于Android有更多的屏幕分辨率的可能性,我需要能够像这样动态生成背景。然而,我还没有找到任何方法来获得Android中窗口的高度/宽度。我可以获得屏幕分辨率,但其中包括应用程序标题栏和通知栏,这是不可接受的

我想知道如何获得我的窗口大小,或者屏幕分辨率减去标题栏和通知栏。我想这可能是可能的使用我的布局管理器的尺寸,但我不能得到他们的高度/宽度在onCreate方法,所以我不知道该怎么做


谢谢。

也许可以看看getwidth()和getheight()?这应该给你屏幕的大小。不过,我不知道是否需要酒吧。但是我不这么认为…

在第一个onDraw中,调用getWidth,getHeight。在那之前这些都是无效的


如果您没有使用自定义视图/布局,那么您可以在第一次onWindowFocusChanged时调用getWidth/getHeight,要在我的应用程序中实现这一点,我必须在主活动中找到视图的维度。它看起来像这样:

@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();
}
在重写中使用方法

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

我的博客上有一个教程,可以让你在发布时保存屏幕大小, 你可以在这里阅读:


基本上,你需要跳过第一个布局的onMeasure方法,它可以让你全屏显示,并从中获取宽度和高度。请原谅社区wiki,我没有认真思考就勾选了复选框。你在说哪些getWidth/getHeight方法?对不起,这个问题我可能问得不够清楚。我是为Android而不是BlackBerry开发的,所以Screen.getWidth()不是我想要的。getWidth不适用于屏幕,而是应用于视图或布局。(我知道你在安卓系统上,因为你标记了你的问题;))因此,如果你把一个相对布局的宽度和高度用属性fill_parent,并在你的代码中使用getwidth和getheight,我想它应该会给你满意的答案,这很好地回答了我其余的问题,我理解了这个答案的方法,只有通过叶甫根尼·沙夫兰的补充。(您必须编写自定义布局,在其中覆盖onMeasure方法并为heigt和width设置一些静态变量。)但这种方法仍然不起作用,因为您希望何时获得这些静态集值?在任何onCreate或onStart中,它都将提前,您将得到一个空值。我建议Adorjan Princz在