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:
<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.
CEVAP
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.
Nasıl altına gitmek için aktivite başl...
ScrollView içinde liste görünümü Andro...
MapFragment ScrollView içinde...
Android - HorizontalScrollView ScrollV...
Bir ScrollView içinde ViewPager correc...