【问题标题】:Application do not fit all the display size应用程序不适合所有显示尺寸
【发布时间】:2011-01-26 14:26:11
【问题描述】:

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

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

【问题讨论】:

    标签: java android tablet


    【解决方案1】:

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

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

    【讨论】:

    • 如果没有全屏,我看到标题栏在垂直轴上假定为 20 像素,但我认为这些组件没有理由在我的屏幕上获得 200x600 像素,即使在全屏模式下也是如此。我会试试你的方法,看看会发生什么。
    【解决方案2】:

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

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

    Android docs on this

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-12-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-02
        相关资源
        最近更新 更多