Khu*_*boo 186 android density-independent-pixel
我需要使用dip/dp(在java文件中)编写android小部件的布局.在运行时如果我编码,
int pixel=this.getWindowManager().getDefaultDisplay().getWidth()
;
这将返回屏幕宽度(以像素为单位)(px).为了将其转换为dp,我编码:
int dp =pixel/(int)getResources().getDisplayMetrics().density ;
这似乎没有返回正确的答案.我制作了WVGA800的模拟器,其屏幕分辨率为480×800.当运行模拟器并让代码打印像素和dp的值时,两者都达到了320.该仿真器为240 dpi,其比例因子为0.75.
Dax*_*Dax 363
试试这个
Display display = getWindowManager().getDefaultDisplay();
DisplayMetrics outMetrics = new DisplayMetrics ();
display.getMetrics(outMetrics);
float density = getResources().getDisplayMetrics().density;
float dpHeight = outMetrics.heightPixels / density;
float dpWidth = outMetrics.widthPixels / density;
Run Code Online (Sandbox Code Playgroud)
要么
谢谢@TomášHubálek
DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics();
float dpHeight = displayMetrics.heightPixels / displayMetrics.density;
float dpWidth = displayMetrics.widthPixels / displayMetrics.density;
Run Code Online (Sandbox Code Playgroud)
ser*_*lee 105
我偶然发现了谷歌的这个问题,后来发现一个简单的解决方案对API> = 13有效.
供将来参考:
Configuration configuration = yourActivity.getResources().getConfiguration();
int screenWidthDp = configuration.screenWidthDp; //The current width of the available screen space, in dp units, corresponding to screen width resource qualifier.
int smallestScreenWidthDp = configuration.smallestScreenWidthDp; //The smallest screen size an application will see in normal operation, corresponding to smallest screen width resource qualifier.
Run Code Online (Sandbox Code Playgroud)
请参阅配置类参考
编辑:如Nick Baicoianu所述,这将返回屏幕的可用宽度/高度(在大多数情况下应该是有趣的).如果您需要实际的显示尺寸,请坚持最佳答案.
val widthDp = resources.displayMetrics.run { widthPixels / density }
val heightDp = resources.displayMetrics.run { heightPixels / density }
Run Code Online (Sandbox Code Playgroud)
或作为单线:
val (height, width) = resources.displayMetrics.run { heightPixels/density to widthPixels/density }
Run Code Online (Sandbox Code Playgroud)
您缺少默认密度值160.
2 px = 3 dip if dpi == 80(ldpi), 320x240 screen
1 px = 1 dip if dpi == 160(mdpi), 480x320 screen
3 px = 2 dip if dpi == 240(hdpi), 840x480 screen
Run Code Online (Sandbox Code Playgroud)
换句话说,如果你在纵向模式下设计宽度等于160dip的布局,它将是所有ldpi/mdpi/hdpi设备屏幕的一半(我认为除了平板电脑)
如何使用它呢?
final DisplayMetrics displayMetrics=getResources().getDisplayMetrics();
final float screenWidthInDp=displayMetrics.widthPixels/displayMetrics.density;
final float screenHeightInDp=displayMetrics.heightPixels/displayMetrics.density;
Run Code Online (Sandbox Code Playgroud)
DisplayMetrics displayMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
int width_px = Resources.getSystem().getDisplayMetrics().widthPixels;
int height_px =Resources.getSystem().getDisplayMetrics().heightPixels;
int pixeldpi = Resources.getSystem().getDisplayMetrics().densityDpi;
int width_dp = (width_px/pixeldpi)*160;
int height_dp = (height_px/pixeldpi)*160;
Run Code Online (Sandbox Code Playgroud)
在 kotlin 中回答:
context?.let {
val displayMetrics = it.resources.displayMetrics
val dpHeight = displayMetrics.heightPixels / displayMetrics.density
val dpWidth = displayMetrics.widthPixels / displayMetrics.density
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
149861 次 |
最近记录: |