我需要使用dip/dp(在java文件中)编码android小部件的布局。在运行时,如果我编码,
.getWidth .getDefaultDisplay int像素= this.getWindowManager () () ();
返回屏幕宽度(像素)。为了将其转换为dp,我编写了如下代码:
int dp =pixel/(int)getResources().getDisplayMetrics().density;
这似乎没有返回正确的答案。我做了WVGA800的模拟器,屏幕分辨率是480 * 800。当运行模拟器并让代码打印像素和dp值时,两者都是320。该模拟器为240 dpi,比例因子为0.75。
正如@Tomáš Hubálek提到的;
试着这样做:
DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics();
float dpHeight = displayMetrics.heightPixels / displayMetrics.density;
float dpWidth = displayMetrics.widthPixels / displayMetrics.density;
OR
试试老答案:
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;
我从谷歌中偶然发现了这个问题,后来我找到了一个适用于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.
参见配置类参考
编辑:正如Nick Baicoianu所指出的,这将返回屏幕的可用宽度/高度(这应该是大多数使用中有趣的部分)。如果您需要实际的显示尺寸,请坚持顶部的答案。
在DP方面获得屏幕宽度和高度,并进行良好的装饰:
步骤1:创建接口
public interface ScreenInterface {
float getWidth();
float getHeight();
}
步骤2:创建实现者类
public class Screen implements ScreenInterface {
private Activity activity;
public Screen(Activity activity) {
this.activity = activity;
}
private DisplayMetrics getScreenDimension(Activity activity) {
DisplayMetrics displayMetrics = new DisplayMetrics();
activity.getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
return displayMetrics;
}
private float getScreenDensity(Activity activity) {
return activity.getResources().getDisplayMetrics().density;
}
@Override
public float getWidth() {
DisplayMetrics displayMetrics = getScreenDimension(activity);
return displayMetrics.widthPixels / getScreenDensity(activity);
}
@Override
public float getHeight() {
DisplayMetrics displayMetrics = getScreenDimension(activity);
return displayMetrics.heightPixels / getScreenDensity(activity);
}
}
第三步:在活动中获取宽度和高度:
Screen screen = new Screen(this); // Setting Screen
screen.getWidth();
screen.getHeight();
2023答案简化Kotlin:
val widthDp = resources.displayMetrics.run { widthPixels / density }
val heightDp = resources.displayMetrics.run { heightPixels / density }
一行程序:
val (height, width) = resources.displayMetrics.run { heightPixels/density to widthPixels/density }
对于Jetpack撰写:
val (height, width) = LocalConfiguration.current.run { screenHeightDp.dp to screenWidthDp.dp }