Android:获取活动窗口的维度

时间:2012-07-27 16:46:31

标签: android android-activity window

在我的某些活动中,我正在使用主题 -

  

机器人:主题= “@机器人:风格/ Theme.Dialog”

有什么方法可以找到屏幕上这个窗口的实际尺寸吗?我的最后努力以:

结束
Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();

这给了我整个屏幕的实际分辨率。有什么想法吗?

THX

4 个答案:

答案 0 :(得分:3)

从API级别13开始: Point screenSize = new Point(); getActivity().getWindowManager().getDefaultDisplay().getSize(screenSize);

见这里:http://developer.android.com/reference/android/view/Display.html#getSize(android.graphics.Point)

答案 1 :(得分:0)

不确定这是完全正确的解决方案,但我通过从您为对话框膨胀的布局获取根视图解决了这个问题(在这种情况下您需要分配id),之后很容易获得尺寸:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/root"
    android:layout_width="300dp"
    android:layout_height="wrap_content"
    android:layout_gravity="right"
    android:layout_marginTop="103dp"
    android:background="#FFFFFF">

    <RelativeLayout 
        android:id="@+id/report_header"
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:paddingLeft="15dp">
        ....
    </RelativeLayout>
</RelativeLayout>

在对话活动中,您需要获得根目录:

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

    setContentView(R.layout.dialog_layout);
    View root = findViewById(R.id.root);
}

之后,您可以通过以下方式获得对话框维度:

Rect r = new Rect ( 0, 0, 0, 0 );
root.getHitRect ( r );

此次通话后,r将包含您要查找的尺寸

答案 2 :(得分:0)

有一种非常简单的方法

    <RelativeLayout mlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/rootView"
        >
... some other views
    </RelativeLayout>

而且,在您的活动中,您需要在绘制视图后获取视图。

像这样:

private View mRoot;

    @Override
    protected void onResume() {
        super.onResume();

        mRoot = findViewById(R.id.rootView);

        /* after the main view is loaded, start positioning the views */
        mRoot.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
            @Override
            public void onGlobalLayout() {
// in here, the view is already loaded, you can get his size.
// without the navigation / status / title bar
                // remove the observer, we don't need it anymore
mRoot.getViewTreeObserver().removeOnGlobalLayoutListener(this);
                mButton.setRadius(1000);
                mButton.setMinimumWidth(mRoot.getWidth() / 2);
                mButton.setY(mRoot.getHeight() / 3 * 2);
            }
        });
    }
希望有所帮助。

答案 3 :(得分:-1)

您可以使用两种方法:第一种方法是这样的:

           Display display = getActivity().getWindowManager().getDefaultDisplay(); 
           int width = display.getWidth();
           int widthdp = (int) (width / getResources().getDisplayMetrics().density);
           int height = display.getHeight();
           int heightdp = (int) (height / getResources().getDisplayMetrics().density);

您可以使用的第二个是:

                Point size = new Point();
                display.getSize(size);
                int width_one = size.x;
                int height_one = size.y;