1

ビューの高さを取得するのに苦労しています。現在、アプリのコールド スタート時にgetMeasuredHeight()、ビューで が返されます0

今、私はこれを回避する方法を知っています。ビューがまだレイアウトされていないために発生しています。残念ながら、 a のようなものを使用してaddOnGlobalLayoutListenerも十分ではありません。usingTabLayoutのオフセットを設定するには、このビューの高さ (ユーザーの設定に応じてツールバー +またはツールバーのみ) が必要です。アプリのコールド スタート時に、「更新」されていることが示されます。データの読み込み中または変更中はいつでも、「更新中」と表示されます。高さがわからないと「スッキリ」とは言えません。コールド スタートの開始時に必要なため、計算を遅らせることはできません。言うまでもなく、それは 2 つの可能な高さのうちの 1 つかもしれません。SwipeRefreshLayoutsetProgressCircleOffset()SwipeRefreshLayoutSwipeRefreshLayout

だから私の質問はこれです:私たちはデバイスのDPIを取得することができ、私は一般的に(試行錯誤によって)dpビューの高さ(で)を見積もることができるので(そしてそれは代替です)-「式を作成することは可能ですか? 」または画面サイズに基づいてオフセットを調整するものはありますか? を に変換する必要があることはわかっていますがdppxそれ以上はどうすればよいかわかりません。

たとえば、Nexus 6 ではこのビューの高さが 334px (513dpi に設定) であることがわかっています。しかし、私の在庫のPixel Cでは間違いなく少ないです(334pxのオフセットはPixel Cでは大きすぎます).

4

1 に答える 1

1

だから、AMAN77のおかげでこれを解決することができました。

デバイス ディスプレイの高さ (ピクセル単位の合計高さ) を取得し、それをオフセットのパーセンテージ (試行錯誤で得たもの) で乗算しました。

これが私がしたことです:

    int screenHeight = getContext().getResources().getDisplayMetrics().heightPixels;
    int headerOffset = Math.round((float) (screenHeight * 0.13));

    //if the user has the "toolbar" setting enabled, we need a different offset
    if (SettingValues.single) {
        headerOffset = Math.round((float) (screenHeight * 0.07));
    }

    mSwipeRefreshLayout.setProgressViewOffset(false,
            headerOffset - Reddit.pxToDp(42, getContext()),
            headerOffset + Reddit.pxToDp(42, getContext()));

魔法のように働きました!

于 2016-03-29T19:41:38.237 に答える