2017-01-18 6 views
0

LinearLayoutの高さがwrap_contentに設定され、その子の高さの合計が画面より大きい場合、一部の子は表示されません。その場合は、すべての子供が見えるようになるまで子供を取り除きたい。これを行う効率的な方法は何ですか?LinearLayoutが小さすぎて子を含むことができないかどうかを調べる方法

@Override 
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
    //when measuring with unspecified, the layout will be as large as it wants to be 
    super.onMeasure(UNSPECIFIED_SPEC, UNSPECIFIED_SPEC); 
    if (getOrientation() == VERTICAL){ 
     wantedLength = getMeasuredHeight(); 

    } else { 
     wantedLength = getMeasuredWidth(); 
    } 

    super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
    if (getOrientation() == VERTICAL){ 
     measuredLength = getMeasuredHeight(); 

    } else { 
     measuredLength = getMeasuredWidth(); 
    } 


    while (measuredLength < wantedLength){ 
     //todo remove child 
     super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
     if (getOrientation() == VERTICAL){ 
      measuredLength = getMeasuredHeight(); 

     } else { 
      measuredLength = getMeasuredWidth(); 
     } 
    } 

} 

2回測定しないとレイアウトが小さすぎるかどうかを知る方法はありますか?ドキュメント内にMEASURED_STATE_TOO_SMALLが見つかりましたが、使用方法はわかりません。 https://developer.android.com/reference/android/view/View.html#getMeasuredHeightAndState()

+0

なぜ「すべて」を保持するために「scrollview」を使用しないのですか?とにかく 'Display'クラスから表示サイズを得ることができます。次に、アイテムの合計サイズを計算します。他のアイテムを削除します。 –

+0

スクロールせずに1画面に情報を表示したい。子供たちが合わないときは、あまり重要でないものは取り除くことができます –

答えて

0

は、あなたがピクセルあなたを得る)

public Map<String, Integer> deriveMetrics(Activity activity) { 
    try { 
     DisplayMetrics metrics = new DisplayMetrics(); 

     if (activity != null) { 
      activity.getWindowManager().getDefaultDisplay().getMetrics(metrics); 
     } 

     Map<String, Integer> map = new HashMap<String, Integer>(); 
     map.put("screenWidth", Integer.valueOf(metrics.widthPixels)); 
     map.put("screenHeight", Integer.valueOf(metrics.heightPixels)); 
     map.put("screenDensity", Integer.valueOf(metrics.densityDpi)); 

     return map; 
    } catch (Exception err) { 
     ; // just use zero values 
     return null; 
    } 
} 

その後、あなたはのgetWidth()とのgetHeight(とviewName.getParent()と を呼び出すことにより、ビューの親を取得することができますピクセルで表示サイズを取得します。必要。

次に、保存する計算と削除する計算を行います。

関連する問題