Android - 在类中获取DisplayMetrics

时间:2016-01-14 10:27:05

标签: android

我正在开发一个自定义类来帮助调整其他类的布局。

这是班级

var xAxis = d3.svg.axis().scale(xScale).orient("bottom")
  .ticks(5).tickFormat(function(d) {
    var today = new Date();
    var r = today.getFullYear() + "-" + (today.getMonth() +1) + "-" + today.getDate();
    var today = new Date(r);
    var hrs = (d - today)/(1000*60*60);
    if (hrs == 0)
      return "NOW";
    else   
      return hrs;
  }).tickSize(0).outerTickSize(0);

之前,我使用类:

public class LayoutResize{

    Context context;
    DisplayMetrics displayMetrics = new DisplayMetrics();

    public int width(int sizeX)
    {
        //((Activity)context).getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
        //getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
        //getResources().getDisplayMetrics();

        int screenWidth = displayMetrics.widthPixels * sizeX / 100;
        Log.d("displayMetrics", "dismet" + displayMetrics);
        return screenWidth;
    }

    public int height(int sizeY)
    {
        //((Activity)context).getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
        //getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
        //getResources().getDisplayMetrics();

        int screenHeight = displayMetrics.heightPixels * sizeY / 100;
        return screenHeight;
    }

}

DisplayMetrics displayMetrics = new DisplayMetrics(); public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getWindowManager().getDefaultDisplay().getMetrics(displayMetrics); LayoutResize layoutResize = new LayoutResize(); RelativeLayout mLayout= (RelativeLayout) findViewById(R.id.mLayout); int mLayoutWidth = layoutResize.width(90, displayMetrics); ... } 的宽度调整为窗口大小的90%。

我曾经从我使用mLayout类的每个类传递displayMetrics值。过去是这样的:

LayoutResize

现在,正如public int width(int sizeX, displayMetrics) { ... } 课程所示,我试图传递百分比值。

我已尝试使用这些注释代码,但每个代码返回LayoutResize都会返回null值..我在这里缺少什么?

1 个答案:

答案 0 :(得分:1)

LayoutResize课程中,您创建了一个新的displayMetrics,而不是使用您在onCreate上实例化的那个。{/ p>

您可以在LayoutResize中创建构造函数,并将displayMetrics作为参数传递,如下所示:

public class LayoutResize{

DisplayMetrics displayMetrics;

public LayoutResize (DisplayMetrics displayMetrics){
    this.displayMetrics = displayMetrics;
}

public int width(int sizeX)
{
    int screenWidth = displayMetrics.widthPixels * sizeX / 100;
    Log.d("displayMetrics", "dismet" + displayMetrics);
    return screenWidth;
}

public int height(int sizeY)
{
    int screenHeight = displayMetrics.heightPixels * sizeY / 100;
    return screenHeight;
}

}

然后你实例化如下:

LayoutResize layoutResize = new LayoutResize(displayMetrics);

希望有所帮助