3

以下の手順を使用して、ディスプレイ画面の contentview の幅と高さを確認しています

ContentViewWidth = getWindow().findViewById(Window.ID_ANDROID_CONTENT).getWidth();
ContentViewHeight = getWindow().findViewById(Window.ID_ANDROID_CONTENT).getHeight();

しかし、このメソッドは onCreate または onResume 内では機能しません。onWindowFocusChanged 内でこれらの手順を使用すると、電話で強制終了エラーが発生します。

ディスプレイ画面のコンテンツ ビューを取得する方法を教えてください。コンテンツ ビューはステータスバーとタイトルバーのサイズを除外しています

4

3 に答える 3

1

私は次の手法を使用します-onCreate()ビューが作成されたときに実行されるランナブルを投稿します:

    contentView = findViewById(android.R.id.content);
    contentView.post(new Runnable()
    {
        public void run()
        {
            contentHeight = contentView.getHeight();
        }
    });

このコードは、終了後にメイン UI スレッドで実行されますonCreate()


コンテンツ ビュー自体の高さを取得しようとしている場合は、高さからパディングを差し引く必要があります。これは、Android 2.x ではビューのレイアウトが 4.x とは異なるためです。

contentHeight = contentView.getHeight() - contentView.getTopPadding();
于 2014-01-29T08:45:55.780 に答える
0
Rect rectangle = new Rect();
Window window = getWindow();
window.getDecorView().getWindowVisibleDisplayFrame(rectangle);
int contentHeight = window.findViewById(Window.ID_ANDROID_CONTENT).getHeight();
int contentWidth = window.findViewById(Window.ID_ANDROID_CONTENT).getWidth();
于 2016-08-04T10:42:13.287 に答える
0

画面上で端から端まで伸びていることがわかっている特定の子ビュー (この場合は webview) のコンテンツ レイアウトを把握するために、アクティビティで行ったことは次のとおりです。

まず、OnGlobalLayoutListener から継承します。

public class ContainerActivity extends Activity implements ViewTreeObserver.OnGlobalLayoutListener {
...

次に、リスナーのインターフェイスの onGlobalLayout メソッドを実装します (中程度のズームのくぼみを把握するために、いくつかのピクセル計算を行うことに注意してください。

@Override
public void onGlobalLayout() {
    int nH = this.mWebView.getHeight();
    int nW = this.mWebView.getWidth();

    if (nH > 0 && nW > 0)
    {
        DisplayMetrics oMetrics = new DisplayMetrics();

        this.getWindowManager().getDefaultDisplay().getMetrics(oMetrics); 

        nH = (nH * DisplayMetrics.DENSITY_DEFAULT) / oMetrics.densityDpi;
        nW = (nW * DisplayMetrics.DENSITY_DEFAULT) / oMetrics.densityDpi;

        // do something with nH and nW                  

        this.mWebView.getViewTreeObserver().removeGlobalOnLayoutListener
            ( this
            );

            ...         
    }
}

最後に、レイアウト イベントをリッスンしていることを onCreate() 内のビュー要素 (この場合は mWebView) に伝えてください。

this.setContentView(this.mWebView = new WebView(this));

this.mWebView.getViewTreeObserver().addOnGlobalLayoutListener
    ( this
    );

このアプローチは、古いバージョンの Android で機能します。ics+ には、バインドできるビューごとにレイアウト リスナーがあり、同様の方法で使用されると思います。

于 2012-10-11T01:34:18.197 に答える