当前位置: 代码迷 >> 综合 >> 2021-09-26 Android: /system/build.prop ro.sf.lcd_density属性简单学习 屏幕密度
  详细解决方案

2021-09-26 Android: /system/build.prop ro.sf.lcd_density属性简单学习 屏幕密度

热度:81   发布时间:2023-11-27 11:45:19.0

一,ro.sf.lcd_density属性指定了这个机型使用的dpi是多少,dpi全称是dots per inch,对角线每英寸的像素点的个数。

二、dp也叫dip,是device independent pixels。设备不依赖像素的一个单位。在不同的像素密度的设备上会自动适配,

        1、比如:

         在320x480分辨率,像素密度为160,1dp=1px

         在480x800分辨率,像素密度为240,1dp=1.5px

         计算公式:px = dp * (dpi/160)

        2、其中的 160 是基准值不会变的, dpi就是我们android设备中的 /system/build.prop 文件,其中有一行是这样:ro.sf.lcd_density=160  

三、这里我们写个小app做个实验测试一下。

       1、布局文件中src\main\res\layout\activity_main.xml定义一个button

            android:layout_width="120dp"

            android:layout_height="60dp"

        2、src\main\java\com\giada\density\MainActivity.java

package com.giada.density;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;public class MainActivity extends AppCompatActivity {Button  mButton;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mButton = (Button) findViewById(R.id.button);}public void onClick(View v) {// TODO Auto-generated method stubswitch (v.getId()) {case R.id.button:Toast.makeText(this,  + mButton.getWidth() + "/" + mButton.getHeight() , Toast.LENGTH_SHORT).show();/*DisplayMetrics dm = new DisplayMetrics();getWindowManager().getDefaultDisplay().getMetrics(dm);//通常我们在使用DisplayMetrics时,都是直接获取内部变量来使用。所以下面直接列出各个内部变量。dm.ydpi;     //得到物理屏幕上 Y 轴方向每英寸的像素dm.xdpi;     //得到物理屏幕上 X 轴方向每英寸的像素//ps:  其实这两个大多数情况下都是相同的//你能想象上面像素密度大很清晰 下面密度小跟马赛克一样吗 dm.density;           //获取当前设备的基准比例dm.densityDpi;        //获取系统dpi,随着 build.prop 文件中的代码而改变。dm.widthPixels;       //获取屏幕宽度的像素数量//获取屏幕高度的像素数量!//注意 - 因为这里会自动减去32dp的像素数量,根据分辨率不同的设备,减去的像素数量也不同,但是可以根据公式推算完整(px = dp x 基准比例)。//为啥不用dm.densityDpi / 160 得到基准比例?因为那个会随着build.prop文件代码变更而更改,算出来的不一定准确dm.heightPixels + 32 * dm.ydpi / 160;*/DisplayMetrics dm = new DisplayMetrics();getWindowManager().getDefaultDisplay().getMetrics(dm);Log.d("giada_density",  mButton.getWidth() + "/" + mButton.getHeight()+"  dm.density="+dm.density+"  dm.densityDpi="+dm.densityDpi);break;default:break;}}}

        3、运行的结果如下

       4、基准比例1.1625=186/160  ; 140=120*186/160  ;70=60*186/160  ;

参考文章

[Android] Android开发中dip,dpi,density,px等详解 - 简书

  相关解决方案