Jawaban:
density = getResources().getDisplayMetrics().density;
// return 0.75 if it's LDPI
// return 1.0 if it's MDPI
// return 1.5 if it's HDPI
// return 2.0 if it's XHDPI
// return 3.0 if it's XXHDPI
// return 4.0 if it's XXXHDPI
Anda dapat memeriksa kepadatan layar dengan:
switch (getResources().getDisplayMetrics().densityDpi) {
case DisplayMetrics.DENSITY_LOW:
// ...
break;
case DisplayMetrics.DENSITY_MEDIUM:
// ...
break;
case DisplayMetrics.DENSITY_HIGH:
// ...
break;
case DisplayMetrics.DENSITY_XHIGH:
// ...
break;
}
EDIT Ketahuilah bahwa saat Android berkembang, nilai lain harus disertakan dalam switch
kasus tersebut. Pada hasil edit ini, ini termasuk DisplayMetrics.DENSITY_TV
dan DisplayMetrics.DENSITY_XXHIGH
. Konsultasikan dokumen untuk info terbaru; Saya tidak akan repot-repot mempertahankan jawaban ini.
density
seperti yang disarankan oleh SteD.)
DENSITY_XXHIGH
. Saya menambahkan penafian pada jawaban untuk mencakup semua kasus di masa mendatang. :)
Mulai 2018, Anda dapat menggunakan metode di bawah ini -
public static String getDeviceDensityString(Context context) {
switch (context.getResources().getDisplayMetrics().densityDpi) {
case DisplayMetrics.DENSITY_LOW:
return "ldpi";
case DisplayMetrics.DENSITY_MEDIUM:
return "mdpi";
case DisplayMetrics.DENSITY_TV:
case DisplayMetrics.DENSITY_HIGH:
return "hdpi";
case DisplayMetrics.DENSITY_260:
case DisplayMetrics.DENSITY_280:
case DisplayMetrics.DENSITY_300:
case DisplayMetrics.DENSITY_XHIGH:
return "xhdpi";
case DisplayMetrics.DENSITY_340:
case DisplayMetrics.DENSITY_360:
case DisplayMetrics.DENSITY_400:
case DisplayMetrics.DENSITY_420:
case DisplayMetrics.DENSITY_440:
case DisplayMetrics.DENSITY_XXHIGH:
return "xxhdpi";
case DisplayMetrics.DENSITY_560:
case DisplayMetrics.DENSITY_XXXHIGH:
return "xxxhdpi";
}
}
Tetapi seperti yang ditunjukkan @Ted, selalu berkonsultasi dengan dokumen resmi sebelum menggunakan
Dari jawaban di atas, saya menggabungkannya dan membuat fungsi di bawah ini:
public static String getDeviceDensity(Context context){
String deviceDensity = "";
switch (context.getResources().getDisplayMetrics().densityDpi) {
case DisplayMetrics.DENSITY_LOW:
deviceDensity = 0.75 + " ldpi";
break;
case DisplayMetrics.DENSITY_MEDIUM:
deviceDensity = 1.0 + " mdpi";
break;
case DisplayMetrics.DENSITY_HIGH:
deviceDensity = 1.5 + " hdpi";
break;
case DisplayMetrics.DENSITY_XHIGH:
deviceDensity = 2.0 + " xhdpi";
break;
case DisplayMetrics.DENSITY_XXHIGH:
deviceDensity = 3.0 + " xxhdpi";
break;
case DisplayMetrics.DENSITY_XXXHIGH:
deviceDensity = 4.0 + " xxxhdpi";
break;
default:
deviceDensity = "Not found";
}
return deviceDensity;
}
Sekarang, di perangkat mana Anda ingin mendapatkan informasi kepadatan dan folder mana yang akan digunakan, cukup tambahkan metode di atas dalam aktivitas itu dan tambahkan baris di bawah ini di onCreate
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
Log.d("Screen Density: ", Helper.getDeviceDensity(this));
}
Untuk React Native untuk memeriksa ukuran perangkat mana yang saat ini digunakan
import { PixelRatio } from 'react-native';
switch(PixelRatio.get()) {
case 1:
return "mdpi";
case 1.5:
return "hdpi";
case 2:
return "xhdpi";
case 3:
return "xxhdpi";
case 3.5:
return "xxxhdpi";
}
PixelRatio.get()
akan mengembalikan berbagai nilai tergantung pada ukuran tampilan yang disetel dalam pengaturan Android, dan dpi. Nilai-nilai itu tidak akan sesuai dengan nilai-nilai pasti yang telah Anda tuliskan.
Pada beberapa perangkat (milik saya adalah Galaxy Tab3), baik densitas dan densitasDpi mengembalikan nilai aneh seperti 1,33 (densitas), 213 (densitasDpi). Jadi solusi saya adalah menambahkan tanda ini:
<item type = "bool" name = "is_mdpi"> [bool] </item>
<item type = "bool" name = "is_hdpi"> [bool] </item>
<item type = "bool" name = " is_xhdpi "> [bool] </item>
<item type =" bool "name =" is_xxhdpi "> [bool] </item>
ke 4 file values.xml, letakkan ini di bawah folder res / values- [xxx] / yang sesuai.