2

画面サイズを取得するために、このコードを使用しています

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 をサポートしていることがわかっている画面解像度を取得する唯一の方法です。

4

1 に答える 1

0

この特定の Textview には ViewTreeObserver を使用する必要があります。

いくつかのコード スニペット。

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

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

            }
        });

注意すべき唯一のことは、ビューが変更されるたびにこれが繰り返し呼び出されることです。そのため、変更を追跡するためにダーティ フラグを保持する必要があります。

于 2012-12-02T13:17:08.720 に答える