SetWidth (int pikseller) birim olarak aygıttan bağımsız piksel veya fiziksel piksel kullanıyor mu? Örneğin setWidth (100), bir görünümün genişliğini 100 dip veya 100 piksel olarak ayarlıyor mu?
Teşekkürler.
SetWidth (int pikseller) birim olarak aygıttan bağımsız piksel veya fiziksel piksel kullanıyor mu? Örneğin setWidth (100), bir görünümün genişliğini 100 dip veya 100 piksel olarak ayarlıyor mu?
Teşekkürler.
Yanıtlar:
Piksel kullanır, ancak bunun yerine diplerin nasıl kullanılacağını merak ediyorsunuzdur. Cevap içeride TypedValue.applyDimension()
. Kodda diplerin piksele nasıl dönüştürüleceğine ilişkin bir örnek:
// Converts 14 dip into its equivalent px
Resources r = getResources();
int px = Math.round(TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_DIP, 14,r.getDisplayMetrics()));
Kodda sabit sayıda DIP elde etmenin doğru yolu, aşağıdakilere benzer dp değerlerini içeren bir kaynak XML dosyası oluşturmaktır:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="image_width">100dp</dimen>
<dimen name="image_height">75dp</dimen>
</resources>
Ardından, kodunuzdaki kaynağa şu şekilde bakın:
float width = getResources().getDimension(R.dimen.image_width));
float height = getResources().getDimension(R.dimen.image_height));
Döndürdüğünüz kayan nokta, aygıtın piksel yoğunluğuna göre ölçeklenecektir ve bu nedenle, uygulamanız boyunca bir dönüştürme yöntemini çoğaltmaya devam etmenize gerek kalmaz.
Method setWidth (100), genişlik olarak 100 piksel (dp olarak değil) ayarlayın. Bu nedenle, farklı android telefonlarda genişliği değişen sorunlarla karşılaşabilirsiniz.Yani piksel yerine dp cinsinden ölçüm kullanın.Örnek genişliğinin dp cinsinden ölçümü almak için aşağıdaki kodu kullanın = 300px ve yükseklik = 400px.
int width = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 300, getResources().getDisplayMetrics());
int Height = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 400, getResources().getDisplayMetrics());
float dps = 100;
float pxs = dps * getResources().getDisplayMetrics().density;
Elbette pikseller, yöntem parametre olarak pikselleri istemektir.
Benim için iyi çalışan yukarıdaki cevaplara dayanarak, bazı yardımcı yöntemler üretiyorum , bunları tüm projede kullanmak için araçlarınıza ekledim.
// value in DP
public static int getValueInDP(Context context, int value){
return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, value, context.getResources().getDisplayMetrics());
}
public static float getValueInDP(Context context, float value){
return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, value, context.getResources().getDisplayMetrics());
}
// value in PX
public static int getValueInPixel(Context context, int value){
return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_PX, value, context.getResources().getDisplayMetrics());
}
public static float getValueInPixel(Context context, float value){
return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_PX, value, context.getResources().getDisplayMetrics());
}