2

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

android:theme="@android:style/Theme.Dialog"

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

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

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

谢谢

4

4 回答 4

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)

于 2014-09-15T12:28:59.837 回答
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将包含您正在寻找的尺寸

于 2012-07-27T17:05:13.957 回答
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);
            }
        });
    }

希望有帮助。

于 2015-02-24T13:50:10.610 回答
-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;
于 2012-07-27T19:44:18.920 回答