我正在构建一个Android应用程序,它是专为Galaxy Tab设计的,按规格,屏幕尺寸为1024x600,但如果我尝试以此尺寸添加我的组件,则左侧和底部将被切断。
我添加了以下代码以查看差异
WindowManager mWMgr = (WindowManager) getApplicationContext()
.getSystemService(Context.WINDOW_SERVICE);
int width = mWMgr.getDefaultDisplay().getWidth();
int height = mWMgr.getDefaultDisplay().getHeight();
Toast.makeText(getApplicationContext(),
"[system][w=" + width + ":h=" + height + "]", Toast.LENGTH_LONG).show();
width = getWindowManager().getDefaultDisplay().getWidth();
height = getWindowManager().getDefaultDisplay().getHeight();
Toast.makeText(getApplicationContext(),
"[this][w=" + width + ":h=" + height + "]", Toast.LENGTH_LONG).show();
运行时,显示: [系统] [W = 600,H = 1024] [本] [W = 400,H = 683]
为什么会这样?
如果需要,我添加我的代码将组件放在屏幕上。
这是我的layout.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView android:id="@+id/image01" android:layout_width="match_parent"
android:layout_height="match_parent" android:scaleType="fitXY" />
</LinearLayout>
在这种情况下,我在ImageView上绘制的图像会缩放到屏幕尺寸(400x683)
我测试过:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="600px"
android:layout_height="1024px">
<ImageView android:id="@+id/image01" android:layout_width="match_parent"
android:layout_height="match_parent" android:scaleType="fitXY" />
</LinearLayout>
通过这种方式,图像的左侧和底部被切断了屏幕。
答案 0 :(得分:2)
不要使用Display.getWidth / Height()。这些返回显示的原始大小。这不是你实际拥有多少空间。例如,状态栏将减少您的实际空间,沿着某个轴减少一些未定义的量。并且不要认为使用FLAG_FULLSCREEN可以避免这种情况,因为设备有一个“状态栏”包含背面和主页按钮之类的东西是完全合理的,因此不是你可以摆脱的东西。
调整大小到屏幕的正确方法是通过视图系统。这里最简单的方法就是创建一个实现onSizeChanged()的View子类,并将其与setContentView()结合使用。布局传递完成后,将使用可用于视图的空间调用onSizeChanged()。只要空间发生变化,就会调用此方法 - 由于方向更改,显示更改,显示IME等等。
答案 1 :(得分:1)
在清单中指定相应的值是否有用:
<supports-screens android:smallScreens=["true" | "false"]
android:normalScreens=["true" | "false"]
android:largeScreens=["true" | "false"]
android:anyDensity=["true" | "false"] />
答案 2 :(得分:1)
你的XML有什么? 填写父级或包装视图的内容?你需要先取决于你正在做的事情......
编辑:顶部Thorsten Dittmars回答......