getWindowManager()。getDefaultDisplay()。getMetrics(metrics)无法正常工作

时间:2012-12-01 22:15:30

标签: android android-screen

我正在使用此代码来获取屏幕尺寸

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.some_layout);
    //more stuff
    setTextSize();
}

private void setTextSize() {
    DisplayMetrics metrics = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(metrics);
    int width = metrics.widthPixels;
    //more code
    sometextview.setTextSize(TypedValue.COMPLEX_UNIT_PX, width/10); //example only
}

事实证明,在极少数情况下这不起作用。我正在设置一些文本大小,有时它根本不会调整文本大小。我认为只有在我暂时不打开应用程序时才会发生这种情况,因此调试它非常困难。只有我的想法是,这是在应用程序甚至知道它之前询问屏幕大小(这是第一个活动)。 我该如何解决这个问题?这是我知道支持所有API的屏幕分辨率的唯一方法。

1 个答案:

答案 0 :(得分:0)

您需要将ViewTreeObserver用于此特定Textview。

一些代码段。

ViewTreeObserver vto = myTextView.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {

            @Override
            public void onGlobalLayout() {
                setTextSize();

            }
        });

唯一需要注意的是,每次视图更改时都会重复调用,因此您需要保留脏标记来跟踪更改。