2016-03-29 6 views
1

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

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

私はデバイスのDPIを取得することができ、一般的には(試行錯誤によって)ビューの高さ(それは代替値です)を見積もることができます画面サイズに基づいてオフセットを適応させる「数式」などを作成しますか?私はdppxに変換する必要があることを知っていますが、それを超えて、これについてどうやって行くのか分かりません。

たとえば、このビューの高さは自分のNexus 6で334px(513dpiに設定)です。私の株式Pixel C(Pixel Cでは334pxのオフセットがあまりにも多すぎます)では明らかに少なくなっています。

+1

パーセンテージベースの値は機能しますが、なぜこれをやりたいのですか? – AMAN77

+0

@ AMAN77なぜ私はしないでしょうか? – Nxt3

+0

@ AMAN77スクリーンの高さ全体のうち、一定の割合を行うだけですか?それは悪い選択肢のようには見えません。 – Nxt3

答えて

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())); 

が魅力のように働きました!

関連する問題