SORU
24 Aralık 2010, Cuma


Resimler içinde kılavuz ScrollView

Her iki metin ve görüntüleri ile bir ekran oluşturmak için çalışıyorum. Görüntüleri aşağıda gösterildiği gibi bir kılavuz gibi düzenlendiği olmak istiyorum, ama onları hiçbir kaydırma işlevi bir çevre ScrollView tarafından sağlanan diğer sahibi olmak istiyorum.

Görüntüyü en iyi benim sorum göstermek:

alt text

<ScrollView>
    <LinearLayout>
        <ImageView />
        <TextView />
        <GridView />
        <TextView />
    </LinearLayout>
</ScrollView>

Haritayı kılavuz kaydırma yok resimler farklı sayıda, bir kılavuz işlevi yapmak için en iyi yolu nedir?

Lütfen kaydırma işlevi Denetim için devre dışı bırakılması, bu sadece kaydırma çubukları devre dışı bırakır ancak tüm öğeleri göstermiyor gibi çalışmaz unutmayın.

Güncelleme: Aşağıdaki resimde göründüğü gibi kaydırma çubukları Denetim devre dışı gösterir.

alt text

CEVAP
27 Aralık 2010, PAZARTESİ


Oh, evet, bu bir sorun olacak. Hepimiz kendi kaydırma ve çocuklarının geri dönüşüm ek olarak daha yararlı özelliklere sahip olduğunu biliyorum çünkü bana ListViews ve GridViews çocuklarını sarmak için genişletilmiş olamaz çıldırtıyor.

Yine de, bu hack etrafında ya da çok fazla zorluk olmadan kendi ihtiyaçlarına göre kendi düzeni oluşturabilirsiniz. Kafamın üst kapalı, iki ihtimal düşünebiliyorum:

Benim kendi uygulama içinde bir ScrollView içinde gömülü bir liste Görünümü var. Açıkça Liste Görünümü içeriğini tam olarak yüksek olması için söylüyorum ben bunu yaptım. Doğru şu şekilde: ListView.onMeasure() yöntemin içinde düzen parametreleri değiştirerek yapıyorum

public class ExpandableListView extends ListView {

    boolean expanded = false;

    public ExpandableListView(Context context, AttributeSet attrs, int defaultStyle) {
        super(context, attrs, defaultStyle);
    }

    public boolean isExpanded() {
        return expanded;
    }

    public void setExpanded(boolean expanded) {
        this.expanded = expanded;
    }

    @Override
    public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        // HACK!  TAKE THAT ANDROID!
        if (isExpanded()) {         
            // Calculate entire height by providing a very large height hint.
            // View.MEASURED_SIZE_MASK represents the largest height possible.
            int expandSpec = MeasureSpec.makeMeasureSpec(MEASURED_SIZE_MASK,
                        MeasureSpec.AT_MOST);
            super.onMeasure(widthMeasureSpec, expandSpec);

            LayoutParams params = getLayoutParams();
            params.height = getMeasuredHeight();
        } else {
            super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        }
    }
}

Bu çalışır çünkü verdiğiniz bir liste Görünümü modu AT_MOST oluşturur ve tedbirler tüm çocuklar için, içinden onMeasure yöntem (keşfettim bu tarama ile kaynak kodu). Eğer değilse umarım Denetim davranır aynı, ama değil, hala Denetim kendini tüm içeriği ölçebilirsiniz. Ama eğer senin için bu işin içine hile Denetim olsaydın daha kolay olurdu.

Şimdi, bu çözüm tamamen Denetim bu kadar etkili kılan görünüm geri dönüşüm devre dışı bırakmak olacağını akılda tutmak gerekir, ve tüm bu İmageViews eğer görünür olup olmadıklarını bile bellek olacak. Aynı benim bir sonraki çözüm ile gider.

Diğer olasılık Denetim hendek ve kendi düzeni oluşturmak için. Ya AbsoluteLayout RelativeLayout genişletmek olabilir. Örneğin, genişletmek RelativeLayout, elinden her görüntü LEFT_OF önceki, izlemek genişliği her görüntü kadar mı tükendi oda bu satır, ve sonra başlatmak sonraki satır yerleştirerek ilk resim yeni satır BELOW en yüksek görüntü son satır. Görüntüleri yatay olarak ortalanmış veya eşit aralıklı sütunlar daha büyük acılar olacak. Belki AbsoluteLayout daha iyi olur. Bir ağrı ya da böyle, biraz.

İyi şanslar.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • AndroidSale

    AndroidSale

    17 NİSAN 2011
  • Lancome USA

    Lancome USA

    30 HAZİRAN 2009
  • Matthew Smith

    Matthew Smit

    24 Mayıs 2010