2013-08-25 13 views
18

Android'de, maksimum yüksekliğe sahip bir kaydırma görünümünü nasıl oluşturabilir ve içeriği sarmalayabilir, temel olarak içeriği dikey olarak sarar, ancak maksimum yüksekliğe sahip olur?Android'de sarma içeriği ile maksimum yükseklik nasıl ayarlanır?

Ben

<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> 

çalıştı Ama bu çalışmıyor?

İşte
+0

, sorunun başka bir çözümü: https://stackoverflow.com/questions/42694355/how-to-set-recyclerview-max-height/48970129#48970129 – user1506104

cevap

-4

böyle senin Scrollview'a yüksekliğini ayarlayabilirsiniz: - Ben bu özelliği uygulamak için scrollview uzatıldı ve kodunu ekledikten

<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

Kesinlikle soruya cevap vermiyor! – Maverick283

16

:

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

Bunun yararlı olacağını umuyoruz .

+1

Bu uygulama bir kerede çalışır. Ekleyebildiğim tek şey,// ​​res/values ​​/ attrs.xml dosyasındaki maxHeight parametresini XML'de doğru olarak belirtebilmektir (http://developer.android.com/training/custom-views/create -view.html # customattr) – DNax

11

Program aracılığıyla yapabilirsiniz. görünümüne

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; 
    } 
} 

Ve eklemek dinleyici: görünüm yüksekliği değişecektir zaman

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

Dinleyici yöntemi onGlobalLayout(), çağırır. Onları çocuk daha sonra belirlenen

+0

"Boşluk" öğesini OnViewGlobalLayoutListener (Görünüm görünümü) 'yapıcınız üzerinde kaldırmanız gerektiğini düşünüyorum. – Alex

20

Eğer 2 linerlayout içinde birlikte ve daha sonra belirlenen scrool görünümü kullanmalıdır seti Scrollview yüksekliği için herhangi bir görünümde (bir görünümden miras bir sınıfta onMeasure geçersiz)

@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

İşler. Sevmek. A. Çekicilik. –

+0

Teşekkürler! Mükemmel çalışıyorsa – Leon

+0

çalışır. Çok teşekkür ederim! – Duyhungws

0

bu ekleyebilir orta linerlayout düzeni: limit scrollview yüksekliği için yükseklik.

İlgili konular