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);
}
});
}
}