2013-08-25 5 views
18

アンドロイドで、最大高さを持ち、コンテンツをラップするスクロールビューを作成するにはどうすればできますか?コンテンツを垂直方向にラップしますが、最大高さはありますか?アンドロイドのラップコンテンツで最大の高さを設定するにはどうすればよいですか?

私は

<ScrollView 
    android:id="@+id/scrollView1" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
     android:maxHeight="200dp" 
    android:layout_alignParentBottom="true" > 

    <LinearLayout 
     android:id="@+id/maincontainer" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical"> 

    </LinearLayout> 
</ScrollView> 

を試してみました。しかし、これは動作しませんか?

<ScrollView 
android:id="@+id/scrollView1" 
android:layout_width="match_parent" 
android:layout_height="200dp" 
android:layout_alignParentBottom="true" > 

      <LinearLayout 
      android:id="@+id/maincontainer" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:orientation="vertical"> 

      </LinearLayout> 
</ScrollView> 
+0

ここに問題の別の解決方法があります:https://stackoverflow.com/questions/42694355/how-to-set-recyclerview-max-height/48970129#48970129 – user1506104

答えて

-4

+0

確かに質問に答えません! – Maverick283

16

私はScrollViewを拡張して、この機能を実装するためのコードを追加しました::

https://gist.github.com/JMPergar/439aaa3249fa184c7c0c

私はそれが役立つことを願って - あなたはこのようなあなたのScrollviewの高さを設定することができます。ここ

+1

この実装はすぐに機能します。私が追加する唯一のことは、/ res/values/attrs.xmlファイルのmaxHeightパラメータがXML(http://developer.android.com/training/custom-views/create)でこれを指定できることです。 -view.html#customattr) – DNax

11

プログラムで行うことができます。

private static class OnViewGlobalLayoutListener implements ViewTreeObserver.OnGlobalLayoutListener { 
    private final static int maxHeight = 130; 
    private View view; 

    public OnViewGlobalLayoutListener(View view) { 
     this.view = view; 
    } 

    @Override 
    public void onGlobalLayout() { 
     if (view.getHeight() > maxHeight) 
      view.getLayoutParams().height = maxHeight; 
    } 
} 

、ビューにリスナーを追加します。

view.getViewTreeObserver() 
        .addOnGlobalLayoutListener(new OnViewGlobalLayoutListener(view)); 

リスナーは、ビューの高さが変更されるとき、()メソッドを呼び出しますonGlobalLayout。彼らは子供が、その後設定として

+0

あなたの 'OnViewGlobalLayoutListener(View view)'コンストラクタで 'void'を削除する必要があると思います。 – Alex

20

あなたは2 linerlayout内部に一緒にして、設定scroolビューを使用する必要があり、設定されたscrollviewの高さのための任意のビュー(ビューから継承したクラスでonMeasureをオーバーライドする)

@Override 
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
    if (maxHeight > 0){ 
     int hSize = MeasureSpec.getSize(heightMeasureSpec); 
     int hMode = MeasureSpec.getMode(heightMeasureSpec); 

     switch (hMode){ 
      case MeasureSpec.AT_MOST: 
       heightMeasureSpec = MeasureSpec.makeMeasureSpec(Math.min(hSize, maxHeight), MeasureSpec.AT_MOST); 
       break; 
      case MeasureSpec.UNSPECIFIED: 
       heightMeasureSpec = MeasureSpec.makeMeasureSpec(maxHeight, MeasureSpec.AT_MOST); 
       break; 
      case MeasureSpec.EXACTLY: 
       heightMeasureSpec = MeasureSpec.makeMeasureSpec(Math.min(hSize, maxHeight), MeasureSpec.EXACTLY); 
       break; 
     } 
    } 

    super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
} 
+0

作品。好き。 A.チャーム –

+0

ありがとう!それは動作します – Leon

+0

場合完全に動作します。どうもありがとうございます! – Duyhungws

0

にこれを追加することができます中線レイアウト:制限スクロールビューの高さの高さ。

関連する問題