2013-12-11 16 views
6

Uygulamamın Dizeleri doğru bir şekilde ölçebilmesi çok önemlidir; Bunu yapmak için Paint.measureText() kullanıyorum. Maalesef, 4.4'te, bu yöntem artık kesin bir değer vermeyecek şekilde değiştirildi, bunun yerine bir yukarı yönlü değer döndürdü. Metni kesin olarak ölçmek için kullanabileceğim başka bir yöntemden haberdar olan var mı, yoksa başka önerileriniz var mı?Android: 4.4'de Paint.measureText() geriye doğru uyumlu değildir. Herhangi bir geçici çözüm var mı?

Android kaynağı: Bu yansıma geri düşen görünüyor

Android 17 
    return w*mInvCompatScaling; 
Android 18 
    return (float) Math.ceil(w*mInvCompatScaling); 
+0

Muhtemelen mInvCompatScaling ve native_measureText öğelerine erişmek için yansıma kullanabilirsiniz. – njzk2

+0

Yikes, bu gerçekten başka bir yerde bir şey gibi hissediyor ne için oldukça büyük bir değişiklik: https://github.com/android/platform_frameworks_base/commit/8e04840f38a16f806754dfca3de50c2548e67913. Njzk2 önerileri gibi "native_measureText" ifadesini kullanarak yansıtmayı denediniz mi? – CodingIntrigue

+2

Merak ediyorum, metin uzunluklarının alt piksel ölçümü için kullanım durumu nedir? Belki büyük kullanım durumunuz için başka bir çözüm var. – CommonsWare

cevap

0

eski işlevselliğini geri almak için tek yoldur. Aşağıdaki gibi özel yerel yöntem arama ve çağırma.

Paint paint = new Paint(); 
// configure paint here 

Method m = paint.getClass().getDeclaredMethod("native_measureText", 
       String.class, int.class); 
float size = m.invoke(paint, text, 0x2); 
      // text - text to measure 
      // 0x2 - default for Right-To-Left text 

Çok temiz görünmese de, bunun sizin için çalışması gerekir.

0

Sen ayarlamalısınız:

m.setAccessible(true); 

IllegalAccessException almamayı onu çağırmadan önce.

İlgili konular