Android 屏幕参数获取

    SW全称是Smallest Width,表示最小宽度,例如一个适配文件夹values-sw411dp表示如果手机的最小宽度是411dp,那么就命中该文件夹,使用的配置都是这个文件夹下的。

1dp约等于1/160英寸

简单的计算公式为: sw = 屏幕最短边 / ((float)dpi/160)

除号会取整,需要注意涉及计算的变量类型

获取SW:

Configuration config = getResources().getConfiguration();
int smallestScreenWidth = config.smallestScreenWidthDp;

获取DPI:

DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
int density = dm.densityDpi;

获取屏幕分辨率:

DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
int myScreenHeight = dm.heightPixels; //屏幕高
int myScreenWidth = dm.widthPixels; //屏幕宽

 示例:

方式一(公式计算):

sw = 屏幕最短边 / (dpi/160f) = 720 / (280/160) = 411dp

方式二(代码获取):

package com.example.smallestwidth;

import androidx.appcompat.app.AppCompatActivity;
import android.content.res.Configuration;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {
    private Button btn1, btn2, btn3;
    private TextView show1, show2;
    int density;
    int myScreenHeight, myScreenWidth;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        btn1 = findViewById(R.id.btn_sw);
        btn2 = findViewById(R.id.btn_dpi);
        btn3 = findViewById(R.id.btn_wh);
        show1 = findViewById(R.id.show1);
        show2 = findViewById(R.id.show2);
        
        //获取sw
        btn1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Configuration config = getResources().getConfiguration();
                int smallestScreenWidth = config.smallestScreenWidthDp;
                String s = Integer.toString(smallestScreenWidth); //s = "411"
                show1.setText("sw: " + s);
                show2.setText(Math.min(myScreenHeight,myScreenWidth)/((float)density/160)+"dp");
            }
        });
        //获取dpi
        btn2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                DisplayMetrics dm = new DisplayMetrics();
                getWindowManager().getDefaultDisplay().getMetrics(dm);
                density = dm.densityDpi;
                String s = Integer.toString(density); //s = "280"
                show1.setText("dpi: " + s);
            }
        });
        //获取wh
        btn3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                DisplayMetrics dm= new DisplayMetrics();
                getWindowManager().getDefaultDisplay().getMetrics(dm);
                myScreenHeight = dm.heightPixels;
                myScreenWidth = dm.widthPixels;
                String s1 = Integer.toString(myScreenHeight); //s = "1436"
                String s2 = Integer.toString(myScreenWidth); //s = "720"
                show1.setText("Height: " + s1);
                show2.setText("Width: " + s2);
            }
        });
    }
}

  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值