2

私のアプリケーションでは、linearlayout に gridview があります。画面のサイズが異なるため、グリッドビューのコンテナー (linearlayout) の幅を計算してから、画面に表示する列の数を決定します。私の問題です。私が書くとき

linearlayout.getwidth();

oncreate メソッドでビューのサイズを取得するには早すぎるため、0 が返されます。

ビューの高さまたは幅を取得するためのクリーンなソリューションは何ですか。

私は試した

Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
int gridSize = display.getWidth();

しかし、Androidは非推奨と言っています:(

4

1 に答える 1

1

Display.getWidth()Display.getHeight()は両方とも API 13 で非推奨になり、 が優先されますDisplay.getSize(Point)。両方と互換性を持たせるには、バージョンを確認して適切なものを選択する必要があります。

これが私がそうする方法です:

Point size = new Point();
Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
if (Build.VERSION.SDK_INT >= 13) {
    display.getSize(size); // API 13+
} else {
    size.x = display.getWidth();
    size.y = display.getHeight();
}

その後、size.xあなたの幅です。(メソッド シグネチャの前に を付けることを忘れないでください@TargetApi(13) @SuppressWarnings("deprecation")。)

これはユニットの表示幅です。単純に 1 つのビューのサイズを取得したい場合は、UI がレイアウトされた後にそれを呼び出す必要があります。これはこの回答とは少し関係ありませんが、代わりにこのスレッドの回答で解決策を見つけることができます。

于 2013-01-22T21:49:32.627 に答える