SetWidth (int pixels) usa pixel indipendenti dal dispositivo o pixel fisici come unità? Ad esempio, setWidth (100) imposta la larghezza della vista su 100 avvallamenti o 100 px?
Grazie.
SetWidth (int pixels) usa pixel indipendenti dal dispositivo o pixel fisici come unità? Ad esempio, setWidth (100) imposta la larghezza della vista su 100 avvallamenti o 100 px?
Grazie.
Risposte:
Usa i pixel, ma sono sicuro che ti stai chiedendo come usare invece i tuffi. La risposta è dentro TypedValue.applyDimension()
. Ecco un esempio di come convertire i tuffi in px nel codice:
// Converts 14 dip into its equivalent px
Resources r = getResources();
int px = Math.round(TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_DIP, 14,r.getDisplayMetrics()));
Il modo corretto per ottenere un numero costante di DIP nel codice è creare un file XML delle risorse contenente valori dp un po 'come:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="image_width">100dp</dimen>
<dimen name="image_height">75dp</dimen>
</resources>
Quindi fai riferimento alla risorsa nel tuo codice in questo modo:
float width = getResources().getDimension(R.dimen.image_width));
float height = getResources().getDimension(R.dimen.image_height));
Il float restituito verrà ridimensionato di conseguenza per la densità di pixel del dispositivo e quindi non è necessario continuare a replicare un metodo di conversione in tutta l'applicazione.
Metodo setWidth (100), imposta 100 px come larghezza (non in dp) .Quindi potresti incontrare problemi di larghezza variabile su diversi telefoni Android.Quindi usa la misurazione in dp invece di pixel.Usa il codice sottostante per ottenere la misurazione in dp della larghezza del campione = 300 px e altezza = 400 px.
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;
Pixel ovviamente, il metodo richiede pixel come parametro.
Sulla base delle risposte di cui sopra che funziona bene per me, ho generare alcuni metodi di supporto , basta aggiungerle alla utils di utilizzarli in tutto il progetto.
// 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());
}