2

我正在使用这个:

int wi=getWindowManager().getDefaultDisplay().getWidth();

以像素为单位获取屏幕大小。有没有办法让屏幕尺寸在dpi???

我这样做是为了根据屏幕尺寸选择不同的布局。

4

4 回答 4

3

有没有办法以 dpi 获得 escreen 大小???

DisplayMetrics可以告诉你屏幕大小(以像素为单位),加上屏幕密度。从那里,您可以计算屏幕尺寸dp

我这样做是为了根据屏幕尺寸选择不同的布局。

如果您将布局放置在正确的目录中(例如,、、),这将由资源框架自动为您res/layout-large/处理res/layout-sw600dp/

于 2013-03-04T23:44:33.287 回答
1

您必须创建度量对象并执行以下操作

 public class LocalUtil extends Application {
private static Context context1;
private static DisplayMetrics  metrics;
public static void setContext(Context context)
{

        context1=context;
        metrics=context1.getResources().getDisplayMetrics();
}
public static float getDensity()
{
    return metrics.density;
}
public static int getScreenWidth()
{
    return metrics.widthPixels;
}
public static int getScreenHeight()
{
    return metrics.heightPixels;
}
public static float getScreenWidthInDpi()
{
    return metrics.widthPixels/metrics.density;
}
public static float getScreenHeightInDpi()
{
    return metrics.heightPixels/metrics.density;
}

并且每个您想使用此方法的人都可以使用 setcontext 方法设置上下文并根据您的目的调用最佳方法,例如此代码此代码是主要活动的 oncreateView:

 @Override
protected void onCreate(Bundle savedInstanceState) {
    LocalUtil.setContext(getApplicationContext());
    LocalUtil.getScreenWidthInDpi();
    //or call  each method you want
  }
于 2015-07-20T18:32:32.437 回答
0

这是一种以像素为单位计算屏幕宽度和高度的方法。

int widthPixels = getWindowManager().getDefaultDisplay().getWidth();
int heightPixels = getWindowManager().getDefaultDisplay().getHeight();

float scale = getApplicationContext().getResources().getDisplayMetrics().density;

int width = (int) (widthPixels - 0.5f)/scale; //width of screen in dpi
int height = (int) (heightPixels - 0.5f)/scale; //height of screen in dpi
于 2013-03-05T00:15:43.653 回答
0

“以 dpi 为单位的屏幕尺寸”是一个毫无意义的陈述。你只是想获得显示器的DPI吗?

其次,不要这样做

说真的,停下。不要这样做。

按预期使用布局文件夹。如果您需要 HDPI 的不同布局,请将您的自定义布局放入layout-hdpi.

也就是说,如果您只需要密度:

DisplayMetrics metrics = new DisplayMetrics();
getWindow().getDisplayMetrics(metrics);
int dpi = metrics.densityDpi;
于 2013-03-04T23:44:54.410 回答