SORU
10 Kasım 2010, ÇARŞAMBA


Nasıl bir bakış ölçüleri almak mı? () ve getHeight getWidth() her zaman sıfır dönüş

Bir görünüm tablelayout, tablrows ve textviews bir ızgara gibi görünmek için yapılmış. Bu kılavuz genişliği ve yüksekliği lazım. Yöntemleri getheight() ve getwidth() her zaman 0 döndürür. Bu kılavuz dinamik biçim olur ya da bir xml sürümü kullanın.

Biri manzara boyutlarını almak nasıl söyler?


Burada hata Ayıklama sonuçlarını kontrol etmek için kullanılan test programı:

import android.app.Activity;
import android.os.Bundle;
import android.widget.TableLayout;
import android.widget.TextView;

public class appwig extends Activity {  
    @Override
    public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.maindemo);  //<- includes the grid called "board"
      int vh = 0;   
      int vw = 0;

      //Test-1 used the xml layout (which is displayed on the screen):
      TableLayout tl = (TableLayout) findViewById(R.id.board);  
      tl = (TableLayout) findViewById(R.id.board);
      vh = tl.getHeight();     //<- getHeight returned 0, Why?  
      vw = tl.getWidth();     //<- getWidth returned 0, Why?   

      //Test-2 used a simple dynamically generated view:        
      TextView tv = new TextView(this);
      tv.setHeight(20);
      tv.setWidth(20);
      vh = tv.getHeight();    //<- getHeight returned 0, Why?       
      vw = tv.getWidth();    //<- getWidth returned 0, Why?

    } //eof method
} //eof class

CEVAP
10 Aralık 2010, Cuma


OP çoktan gitmiş olduğuna inanıyorum, ama bu cevap gelecek arama yardımcı olur diye bulduğum bir çözüm bir yazı düşünmüştüm. onCreate() benim yöntem: bu kodu ekledim

DÜZENLENMİŞTİR:07/05/11 açıklamalar kod eklemek için:

final TextView tv = (TextView)findViewById(R.id.image_test);
ViewTreeObserver vto = tv.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {

    @Override
    public void onGlobalLayout() {
        LayerDrawable ld = (LayerDrawable)tv.getBackground();
        ld.setLayerInset(1, 0, tv.getHeight() / 2, 0, 0);
        ViewTreeObserver obs = tv.getViewTreeObserver();

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
            obs.removeOnGlobalLayoutListener(this);
        } else {
            obs.removeGlobalOnLayoutListener(this);
        }
    }

});

İlk benim için son başvuru TextView (onGlobalLayout() yöntemi erişmek için). Sonra, " I ViewTreeObserver TextView ve eklemek OnGlobalLayoutListener, geçersiz kılma onGLobalLayout (orada değil gibi görünüyor bir sınıf yöntemi çağırmak için burada...) ve ekleme kodumu gerektiren bilerek ölçüm görünüm bu dinleyici. Tüm beklendiği gibi benim için çalışıyor, bu yardımcı olur umarım.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Menglong Tav

    Menglong Tav

    18 Temmuz 2010
  • MndsgnVEVO

    MndsgnVEVO

    26 Kasım 2013
  • YEAH1TV

    YEAH1TV

    19 ŞUBAT 2009