如何在Android中以像素为单位获取屏幕尺寸

纵饮孤独 提交于 2019-12-06 11:27:08

我创建了一些自定义元素,我想以编程方式将它们放置在右上角(顶部边缘n像素,右侧边缘m像素)。 因此,我需要获取屏幕宽度和屏幕高度,然后设置位置:

int px = screenWidth - m;
int py = screenHeight - n;

如何在主活动中获取screenWidthscreenHeight


#1楼

首先获取视图(例如,通过findViewById() ),然后可以在视图本身上使用getWidth()


#2楼

如果要以像素为单位显示尺寸,可以使用getSize

Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
int width = size.x;
int height = size.y;

如果您不在Activity ,则可以通过WINDOW_SERVICE获取默认的Display

WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
Display display = wm.getDefaultDisplay();

如果您在一个片段中并且想要完成此操作,请使用Activity.WindowManager(在Xamarin.Android中)或getActivity()。getWindowManager()(在Java中)。

在引入getSize之前(在API级别13中),可以使用现已弃用的getWidthgetHeight方法:

Display display = getWindowManager().getDefaultDisplay(); 
int width = display.getWidth();  // deprecated
int height = display.getHeight();  // deprecated

但是,对于您正在描述的用例,布局中的边距/填充似乎更合适。

另一种方法是: DisplayMetrics

描述有关显示器的一般信息的结构,例如其大小,密度和字体缩放。 要访问DisplayMetrics成员,请像这样初始化一个对象:

DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);

我们可以使用widthPixels获取以下信息:

“显示的绝对宽度,以像素为单位。”

例:

Log.d("ApplicationTagName", "Display width in px is " + metrics.widthPixels);

#3楼

查找屏幕的宽度和高度:

width = getWindowManager().getDefaultDisplay().getWidth();
height = getWindowManager().getDefaultDisplay().getHeight();

使用此工具,我们可以获得最新的SDK 13及更高版本。

// New width and height
int version = android.os.Build.VERSION.SDK_INT;
Log.i("", " name == "+ version);
Display display = getWindowManager().getDefaultDisplay();
int width;
if (version >= 13) {
    Point size = new Point();
    display.getSize(size);
    width = size.x;
    Log.i("width", "if =>" +width);
}
else {
    width = display.getWidth();
    Log.i("width", "else =>" +width);
}

#4楼

public class AndroidScreenActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        DisplayMetrics dm = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(dm);
        String str_ScreenSize = "The Android Screen is: "
                                   + dm.widthPixels
                                   + " x "
                                   + dm.heightPixels;

        TextView mScreenSize = (TextView) findViewById(R.id.strScreenSize);
        mScreenSize.setText(str_ScreenSize);
    }
}

#5楼

(2012年的答案,可能已过时)如果要支持Honeycomb之前的版本,则需要在API 13之前实现向后兼容性。类似:

int measuredWidth = 0;
int measuredHeight = 0;
WindowManager w = getWindowManager();

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2) {
    Point size = new Point();
    w.getDefaultDisplay().getSize(size);
    measuredWidth = size.x;
    measuredHeight = size.y;
} else {
    Display d = w.getDefaultDisplay();
    measuredWidth = d.getWidth();
    measuredHeight = d.getHeight();
}

当然,不推荐使用的方法最终还是会从最新的SDK中删除,但是尽管我们仍然依赖大多数拥有Android 2.1、2.2和2.3的用户,但这是我们剩下的。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!