OnMeasure geçersiz kılmak için bir yol Authorative()?
Geçersiz kılma onMeasure doğru yolu nedir? Çeşitli yaklaşımlar gördüm. Örneğin,Profesyonel Android GeliştirmeMeasureSpec boyutlarını hesaplamak için kullanır, sonra setMeasuredDimension bir çağrı ile sona erer(). Örneğin:
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec){
int parentWidth = MeasureSpec.getSize(widthMeasureSpec);
int parentHeight = MeasureSpec.getSize(heightMeasureSpec);
this.setMeasuredDimension(parentWidth/2, parentHeight);
}
this post başı olarak, diğer taraftan, "" yol MeasureSpec, çağrı setMeasuredDimensions kullanmaktır(), . doğru ^strong>izledisetLayoutParams için bir çağrı(), ve süper bir çağrı ile biten.() onMeasure. Örneğin:
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec){
int parentWidth = MeasureSpec.getSize(widthMeasureSpec);
int parentHeight = MeasureSpec.getSize(heightMeasureSpec);
this.setMeasuredDimension(parentWidth/2, parentHeight);
this.setLayoutParams(new *ParentLayoutType*.LayoutParams(parentWidth/2,parentHeight));
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
Hangi doğru yol mu? Her iki yaklaşım da benim için 0 çalıştı.
Gerçekten herkes onMeasure açıklayan bir öğretici biliyor mu. benim sorduğum sanırım(), düzen, çocuğun boyutları vb manzarası.?
CEVAP
Diğer çözümler kapsamlı değildir. Bazı durumlarda çalışırlar, ve başlamak için iyi bir yerdir, ama onlar çalışmak için garanti edilmez.
OnMeasure çağrılan olabilir veya boyutunu değiştirmek için yetkiniz olmayabilir. Senin onMeasure (, ** 5 ** 6) geçirilen değerleri alt görünüm yapmak için izin ne hakkında bilgi içerir. Şu anda üç değer vardır:
MeasureSpec.UNSPECIFIED
- İstediğiniz kadar büyük olabilirMeasureSpec.AT_MOST
- istediğiniz kadar büyük (özel boy), Bu örnekteparentWidth
.MeasureSpec.EXACTLY
- başka çaremiz Yok. Üst seçti.
Bu Android birden fazla geçiş her madde için doğru boyutu, here bakın bulmak için daha fazla bilgi için yapabilirsiniz.
Eğer bu kuralları takip ederseniz, sizin yaklaşım çalışması garanti edilmez.
Eğer boyutunu değiştirmek için izin olup olmadığını kontrol etmek isterseniz, örneğin aşağıdakileri yapabilirsiniz:
final int widthSpecMode = MeasureSpec.getMode(widthMeasureSpec);
final int heightSpecMode = MeasureSpec.getMode(heightMeasureSpec);
boolean resizeWidth = widthSpecMode != MeasureSpec.EXACTLY;
boolean resizeHeight = heightSpecMode != MeasureSpec.EXACTLY;
Bu bilgileri kullanarak kendi kodu gibi değerleri değiştirebilirsiniz olup olmadığını bilir. Ya eğer farklı bir şey yapmak gerekir. Hızlı ve kolay bir şekilde istediğiniz bedene çözmek için bir yol aşağıdaki yöntemlerden birini kullanın:
int resolveSizeAndState (int size, int measureSpec, int childMeasuredState)
int resolveSize (int size, int measureSpec)
İlk Petek üzerinde kullanılabilir olsa da, ikinci tüm sürümleri mevcuttur.
Not: resizeWidth
resizeHeight
her zaman yanlış olduğunu fark edebilirsiniz. Bu ise MATCH_PARENT
talep olsam böyle buldum. Benim ana düzeni WRAP_CONTENT
talep ve BELİRTİLMEMİŞ aşamasında Integer.MAX_VALUE
boyutu isteyerek bunu düzeltmek için başardı. Böylece max boyutu verir senin üst onMeasure sonraki geçişte izin verir.
Nasıl Omurga geçersiz kılmak için.sync...
&Quot Geçersiz kılmak İçin Nasıl Andro...
Neden '397' ReSharper GetHas...
Raylar üzerinde Ruby belirleyici bir y...
Neden alıcı-tek bir özelliği geçersiz ...