2011-12-01 7 views
5

ben dynamicaly TextView bir kombinasyonu ile, getView() yöntemde liste öğelerini doldurmak hangi içinde bir ListView ve bir ImageView var.: hesaplama görünüm boyutu MyAdapter iç :: GetView

GetView içindeki Metin ve Resim görünümünün boyutunu hesaplamam gerekiyor, bu yüzden View çok büyükse visibility=gone ayarlayabileceğim. Ben getView() içindeyim Ancak, düzen değerleri henüz oluşturulmadığını

public View getView(int position, View convertView, ViewGroup parent) { 
    .. 
    View listItem=view.findViewById(R.id.listItem); 
    ImageView imageView=(ImageView)view.findViewById(R.id.myImg); 
    TextView textView=(TextView)view.findViewById(R.id.mytxt); 
    if (imageView.getRight()>listItemText.getRight()) { 
    imageView.setVisibility(View.GONE); 
    } 
    if (textView.getRight()>listItemText.getRight()) { 
    textView.setVisibility(View.GONE);  
    } 
    .. 
} 

, bu yüzden View.getRight() çağrı için yanlış değerler elde: Ben Tring duyuyorum.

Nasıl yapılacağı hakkında herhangi bir fikrin var mı?

+0

Neden String'in uzunluğuna göre TextView içine gireceğinize karar vermiyorsunuz? – Thommy

+0

çünkü aynı metin uzunluğu farklı gerçek genişliğe sahip olabilir – Tomer

+0

ListItemtext'in tüm genişliğini ve çıkarma genişliğini hesaplama hakkında. Textview adn resim görüntüleme içeriğiniz söz konusu genişlik için yeterince küçükse. Göster veya gizle. Sadece meraklı bir soru, metni elipsize edemez ve görüntüyü her zaman görüntülenecek şekilde ölçeklendiremez misiniz? –

cevap

0

Gerçekten böyle bir şey yapmanız gerekiyorsa, bir onLayoutChangeListener kaydedebilir ve sol, sağ, yukarı ve aşağı gibi düzen parametrelerindeki değişiklikleri dinleyebilirsiniz.

textView.addOnLayoutChangeListener(new View.OnLayoutChangeListener() { 
      @Override 
      public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) { 
       // TODO: Take care of visibility here. You can access the parent View by v.getParent() method. 
      } 
     }); 

Ama getView yönteminde böyle bir şey yapmak gerekiyordu değildir. TextView çoklu satırını yapabilir veya textView düzeninde android:ellipsize="marquee"'u ayarlayabilirsiniz. Seçim çerçevesiyle ilgili daha fazla bilgi için: Marquee text in Android