【问题标题】:How to get USABLE screen width and height in Android如何在 Android 中获取可用的屏幕宽度和高度
【发布时间】:2026-01-15 02:15:01
【问题描述】:

我正在创建一个应用程序,我确实需要知道正确的屏幕尺寸。其实我知道怎么做...但是出现了一个问题,因为即使你这样做requestWindowFeature(Window.FEATURE_NO_TITLE);,这个:

仍然停留在屏幕上,它似乎也算作屏幕的一部分,因此“screenWidth”实际上比可用部分更大。

没有任何方法可以获取可用部分的大小而不是整个屏幕的大小吗?或者至少得到“滚动的东西”的大小(但会有一个问题,有些设备不显示它们)?

【问题讨论】:

标签: java android screen


【解决方案1】:

不久前我有同样的问题,这是我找到的答案。显示活动维度。

import android.app.*;
import android.os.*;
import android.view.*;
import android.widget.*;
import android.graphics.Point;

public class MainActivity extends Activity
{
    @Override
    public void onCreate(Bundle icicle)
    {
        super.onCreate(icicle);
        setContentView(R.layout.main)

        Display display = getWindowManager().getDefaultDisplay();
        Point size = new Point();
        display.getSize(size);

        int width = size.x;
        int height = size.y;

        //Set two textViews to display the width and height
        //ex: txtWidth.setText("X: " + width);
    }
}

【讨论】:

  • dispaly.getSize 需要 API LEVEL 13
【解决方案2】:

我知道这个问题真的很老了,但我已经为此奋斗了很多次,直到我找到了这个愚蠢的简单解决方案:

public final void updateUsableScreenSize() {
    final View vContent = findViewById(android.R.id.content);
    vContent.post(new Runnable() {
        @Override
        public void run() {
            nMaxScreenWidth = vContent.getWidth();
            nMaxScreenHeight = vContent.getHeight();
        }
    });
}

在 Activity 的 onCreate() 中的 setContentView() 之后运行此代码,并延迟任何依赖于这些值的代码直到 onCreate() 完成,例如在此之后再次使用 post()。

说明:此代码获取您的活动的根视图,该视图始终可以通过通用资源 id android.R.id.content 访问,并要求 UI 处理程序在初始布局完成后将该代码作为下一条消息运行。您的根视图将具有您可用的确切大小。你不能直接在 onCreate() 回调上运行它,因为布局还没有发生。

【讨论】:

    【解决方案3】:

    你也可以全屏使用

    developer.android

    【讨论】:

    • 非常感谢……但不管怎样,没有其他方法吗?因为这只能用于“KitKat”设备
    • 我使用这个方法:context.resources.displayMetrics.widthPixels context.resources.displayMetrics.heightPixels