在我的某些活动中,我正在使用主题 -
android:theme="@android:style/Theme.Dialog"
有什么办法可以找出屏幕上这个窗口的实际尺寸?我最后的努力以:
Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
这给了我整个屏幕的实际分辨率。有任何想法吗?
谢谢
在我的某些活动中,我正在使用主题 -
android:theme="@android:style/Theme.Dialog"
有什么办法可以找出屏幕上这个窗口的实际尺寸?我最后的努力以:
Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
这给了我整个屏幕的实际分辨率。有任何想法吗?
谢谢
从 API 级别 13:
Point screenSize = new Point();
getActivity().getWindowManager().getDefaultDisplay().getSize(screenSize);
见这里: http: //developer.android.com/reference/android/view/Display.html#getSize(android.graphics.Point)
不确定这是完全正确的解决方案,但我通过从您为对话框膨胀的布局中获取根视图解决了这个问题(在这种情况下,您需要分配 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
将包含您正在寻找的尺寸
有一个非常简单的方法
<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);
}
});
}
希望有帮助。
您可以使用两种方法:第一种方法是这样的:
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;