1

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

运行时显示:[system][w=600:h=1024] [this][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>

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

4

3 回答 3

2

不要使用 Display.getWidth/Height()。这些返回显示的原始大小。这不是您实际拥有的空间。例如,状态栏会减少你所拥有的实际空间,沿着某个轴一些未定义的数量。并且不要认为使用 FLAG_FULLSCREEN 会让你摆脱这种情况,因为设备拥有一个包含返回和主页按钮之类的“状态栏”是完全合理的,因此不是你可以摆脱的。

调整屏幕大小的正确方法是通过视图系统。这里最简单的事情就是创建一个实现 onSizeChanged() 的 View 的子类,并将其与 setContentView() 结合起来。一旦布局传递完成,您的 onSizeChanged() 将使用视图可用的空间调用。每当该空间发生变化时都会调用它——由于方向变化、显示变化、显示 IME 等。

于 2011-01-26T15:04:30.887 回答
1

在清单中指定相应的值是否有帮助:

<supports-screens android:smallScreens=["true" | "false"] 
                  android:normalScreens=["true" | "false"] 
                  android:largeScreens=["true" | "false"] 
                  android:anyDensity=["true" | "false"] />

请参阅有关此的 Android 文档

于 2011-01-26T14:31:28.193 回答
1

您的 XML 中有什么?为视图填充父级或包装内容?你需要第一个取决于你在做什么......

编辑:最重要的是Thorsten Dittmars的回答......

于 2011-01-26T14:33:11.750 回答