Hem yükseklik hem de genişlik olarak xml olarak fill_parent olarak tanımlanan doğrusal düzenin genişliğini ve yüksekliğini nasıl alabilirim? Güvence yöntemini denedim ama neden tam değer vermediğini bilmiyorum. Onarma yöntemi bitirmeden önce bu değerlere bir Etkinlikte ihtiyacım var.Çalışma zamanında düzen yüksekliğini ve genişliğini alın android
cevap
varsayalım ben XML tanımlanan bir LinearLayout
genişliğini almak zorunda. XML ile başvurmak zorundayım. Örneğin, LinearLayout
l
tanımlayın.
l = (LinearLayout)findviewbyid(R.id.l1);
ViewTreeObserver observer = l.getViewTreeObserver();
observer.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
// TODO Auto-generated method stub
init();
l.getViewTreeObserver().removeGlobalOnLayoutListener(
this);
}
});
protected void init() {
int a= l.getHeight();
int b = l.getWidth();
Toast.makeText(getActivity,""+a+" "+b,3000).show();
}
callfragment();
}
Farkında Olun! OnCreate bitirmeden önce size değer vermez. OnCreate metodu içinde çağırmış olsaydım, geçersiz kılma yöntemi geç çağrılacak. Bu yüzden uygulamanızın yavaş gitmesi gibi görünebilir, ancak amacım çözülür. – MGDroid
Dizilim oluşturulduktan sonra, genişlik ve yükseklik değerleri ayarlanır, ardından öğeler ölçülür. OnSizeChanged için yapılan ilk çağrıda, bu denetimi kullandığınız takdirde, 0 olacaktır.
burada Biraz daha detay https://groups.google.com/forum/?fromgroups=#!topic/android-developers/nNEp6xBnPiw
ve burada İşte http://developer.android.com/reference/android/view/View.html#Layout
onLayout nasıl kullanılacağını geçerli:
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
int width = someView.getWidth();
int height = someView.getHeight();
}
Sen düzeni düzen değişikliği dinleyici eklemek ve en yeni yükseklik ve genişlik veya son değişiklikten önce bir tane bile olabilir. 11
zaman görünümü değişikliğinin sınırları nedeniyle düzeni işleme çağrılacak bir dinleyici ekleyin Eklendi API düzeyinde
. Daha sonra ilk onGlobalLayout dinleyici kaldırmak ve yüksekliği ile istediğini yapmak -
LinearLayout myLinearLayout = (LinearLayout) findViewById(R.id.my_linear_layout);
myLinearLayout.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) {
// Preventing extra work because method will be called many times.
if(height == (bottom - top))
return;
height = (bottom - top);
// do something here...
}
});
o iş elde etmek için, istenilen yükseklik değeri 0'dan büyük olup olmadığını kontrol etmek gerekir. Dinleyici, yöntemini sürekli olarak çağırır ve ilk çağrı ile görüntünün düzgün bir şekilde ölçülmesinin garanti edilmez.
final LinearLayout parent = (LinearLayout) findViewById(R.id.parentView);
parent.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
int availableHeight = parent.getMeasuredHeight();
if(availableHeight>0) {
parent.getViewTreeObserver().removeGlobalOnLayoutListener(this);
//save height here and do whatever you want with it
}
}
});
Bu hile yaptı - teşekkürler. Kaldırılacak dinleyici çağrısı, API 16 seviyesinden kaldırılmıştır. Bu yayın, daha önceki ve sonraki API'lar için aramayı nasıl destekleyeceğini açıklar http://stackoverflow.com/a/23741481/2162226 – gnB
- 1. Aygıtın yüksekliğini ve genişliğini xamarin
- 2. bir GridPane genişliğini ve yüksekliğini
- 3. DialogFragment - İletişim genişliğini alın
- 4. Android bildirim paneli genişliğini alın
- 5. Çalışma zamanında Hazırlama Profilinin EXPIRATION tarihini alın.
- 6. jQuery kaydırıcısının genişliğini ve yüksekliğini değiştirme
- 7. CSS, genişliğini ve yüksekliğini koruyor mu?
- 8. Resim yüksekliğini ve genişliğini göster PHP
- 9. Yazı tipi yüksekliğini ve genişliğini değiştir
- 10. Gnuplot çıktısının genişliğini ve yüksekliğini artırın
- 11. Çalışma zamanında
- 12. Android Düzen -
- 13. Çalışma zamanında menü değiştirme
- 14. Pencere yüksekliğini alın
- 15. Android renk dizesini çalışma zamanında int
- 16. Çalışma zamanında "android: layout_below" öğesini programlı olarak ayarlayabilir miyim?
- 17. Android: Genişliğini temel alarak XML'de düğme yüksekliğini ayarlama
- 18. Çalışma zamanında bir android xml görünümüne düğme denetimi nasıl eklenir?
- 19. Android - Bir görüntü nasıl indirilir ve çalışma zamanında kullanılır?
- 20. C# kullanarak FLV ve SWF'nin genişliğini ve yüksekliğini hesapla C#
- 21. Terminal genişliğini alın Haskell
- 22. Spring Boot yönetim bağlantı noktasını çalışma zamanında alın. management.port = 0
- 23. Çalışma zamanında bir Object ile ilgili başvuruların miktarını alın
- 24. Çalışma zamanında dize olarak parametreler alın (Scala 2.11)
- 25. jQuery: her öğenin genişliğini alın ve özetleyin
- 26. Alt düzen genişliğini programatik olarak ayarlayın ANDROID'de?
- 27. Çalışma zamanında oluşturulan bir sınıf için baytları alın
- 28. Yay Batch: çalışma zamanında tanımlanan işlerin listesini alın
- 29. çalışma zamanında dinamik
- 30. Çalışma zamanında XAML yükleniyor?
IIRC, ölçülmeden önce herhangi bir şeyin yüksekliğini/genişliğini alamazsınız. OnSizeChanged çağrıldığında atandı, eğer onLayout'u geçersiz kılarsanız tüm görünümler bir yükseklik ve genişliğe sahip olmalıdır – tom502
@ tom502 bana bir link veya kod parçası verebilir misiniz? Çok yardımcı olacak. – MGDroid