getWindowManager().getDefaultDisplay().getMetrics(metrics) 无



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

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 的屏幕分辨率的方法。

您需要为此特定的 Textview 使用 ViewTreeObserver 。

一些代码片段。

ViewTreeObserver vto = myTextView.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
            @Override
            public void onGlobalLayout() {
                setTextSize();
            }
        });

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

相关内容

  • 没有找到相关文章

最新更新