应用程序不适合所有显示尺寸

时间:2011-01-26 14:26:11

标签: java android tablet

我正在构建一个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>

通过这种方式,图像的左侧和底部被切断了屏幕。

3 个答案:

答案 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"] />

请参阅Android docs on this

答案 2 :(得分:1)

你的XML有什么? 填写父级或包装视图的内容?你需要先取决于你正在做的事情......

编辑:顶部Thorsten Dittmars回答......