Pertanyaan Dapatkan dimensi layar dalam piksel


Saya membuat beberapa elemen khusus, dan saya ingin menempatkannya secara terprogram ke sudut kanan atas (n piksel dari tepi atas dan m piksel dari tepi kanan). Oleh karena itu saya perlu mendapatkan lebar layar dan tinggi layar dan kemudian mengatur posisi:

int px = screenWidth - m;
int py = screenHeight - n;

Bagaimana saya mendapatkan screenWidth dan screenHeight dalam Kegiatan utama?


1672
2018-06-19 08:25


asal


Jawaban:


Jika Anda menginginkan dimensi tampilan dalam piksel dapat Anda gunakan getSize:

Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
int width = size.x;
int height = size.y;

Jika Anda tidak berada dalam Activity Anda bisa mendapatkan default Display melalui WINDOW_SERVICE:

WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
Display display = wm.getDefaultDisplay();

Sebelum getSize diperkenalkan (di API level 13), Anda bisa menggunakan getWidth dan getHeight metode yang sekarang tidak lagi digunakan:

Display display = getWindowManager().getDefaultDisplay(); 
int width = display.getWidth();  // deprecated
int height = display.getHeight();  // deprecated

Untuk kasus penggunaan yang Anda jelaskan, margin / padding di tata letak tampaknya lebih sesuai.

Cara lain adalah: DisplayMetrics

Struktur yang menggambarkan informasi umum tentang tampilan, seperti ukurannya, kepadatan, dan skala font. Untuk mengakses anggota DisplayMetrics, lakukan inisialisasi objek seperti ini:

DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);

Kita bisa gunakan widthPixels untuk mendapatkan informasi untuk:

"Lebar absolut dari tampilan dalam piksel."

Contoh:

Log.d("ApplicationTagName", "Display width in px is " + metrics.widthPixels);

3327
2018-06-19 08:41



Salah satu caranya adalah:

Display display = getWindowManager().getDefaultDisplay(); 
int width = display.getWidth();
int height = display.getHeight();

Sudah tidak berlaku lagi, dan Anda harus mencoba kode berikut. Dua baris kode pertama memberi Anda tujuan DisplayMetrics. Objek ini berisi bidang seperti heightPixels, widthPixels.

DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);

int height = metrics.heightPixels;
int width = metrics.widthPixels;

350
2018-01-31 02:01



Ini mungkin tidak menjawab pertanyaan Anda, tetapi bisa berguna untuk mengetahui (saya sendiri yang mencari ketika saya datang ke pertanyaan ini) bahwa jika Anda memerlukan dimensi Tampilan tetapi kode Anda sedang dieksekusi ketika tata letaknya belum ditata (misalnya di onCreate() ) Anda dapat mengatur ViewTreeObserver.OnGlobalLayoutListener dengan View.getViewTreeObserver().addOnGlobalLayoutListener() dan letakkan kode yang relevan yang membutuhkan dimensi tampilan di sana. Callback pendengar akan dipanggil ketika tata letak telah ditata.


111
2018-04-06 21:23



(Jawaban 2012, mungkin sudah ketinggalan zaman) Jika Anda ingin mendukung pra Honeycomb, Anda harus memasang kompatibilitas ke belakang sebelum API 13. Sesuatu seperti:

int measuredWidth = 0;
int measuredHeight = 0;
WindowManager w = getWindowManager();

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2) {
    Point size = new Point();
    w.getDefaultDisplay().getSize(size);
    measuredWidth = size.x;
    measuredHeight = size.y;
} else {
    Display d = w.getDefaultDisplay();
    measuredWidth = d.getWidth();
    measuredHeight = d.getHeight();
}

Tentu saja, metode yang tidak digunakan lagi pada akhirnya akan dikeluarkan dari SDK terbaru, tetapi sementara kami masih mengandalkan sebagian besar pengguna kami yang memiliki Android 2.1, 2.2, dan 2.3, inilah yang tersisa dari kami.


103
2017-07-24 03:14



Saya telah mencoba semua "solusi" yang mungkin tidak berhasil dan saya melihat bahwa aplikasi Elliott Hughes "Dalvik Explorer" selalu menunjukkan dimensi yang benar pada setiap perangkat Android / versi OS. Saya akhirnya melihat proyek open source yang dapat ditemukan di sini: https://code.google.com/p/enh/

Ini semua kode yang relevan:

WindowManager w = activity.getWindowManager();
Display d = w.getDefaultDisplay();
DisplayMetrics metrics = new DisplayMetrics();
d.getMetrics(metrics);
// since SDK_INT = 1;
widthPixels = metrics.widthPixels;
heightPixels = metrics.heightPixels;
try {
    // used when 17 > SDK_INT >= 14; includes window decorations (statusbar bar/menu bar)
    widthPixels = (Integer) Display.class.getMethod("getRawWidth").invoke(d);
    heightPixels = (Integer) Display.class.getMethod("getRawHeight").invoke(d);
} catch (Exception ignored) {
}
try {
    // used when SDK_INT >= 17; includes window decorations (statusbar bar/menu bar)
    Point realSize = new Point();
    Display.class.getMethod("getRealSize", Point.class).invoke(d, realSize);
    widthPixels = realSize.x;
    heightPixels = realSize.y;
} catch (Exception ignored) {
}

EDIT: versi sedikit lebih baik (hindari menembak pengecualian pada versi OS yang tidak didukung):

WindowManager w = activity.getWindowManager();
Display d = w.getDefaultDisplay();
DisplayMetrics metrics = new DisplayMetrics();
d.getMetrics(metrics);
// since SDK_INT = 1;
widthPixels = metrics.widthPixels;
heightPixels = metrics.heightPixels;
// includes window decorations (statusbar bar/menu bar)
if (Build.VERSION.SDK_INT >= 14 && Build.VERSION.SDK_INT < 17)
try {
    widthPixels = (Integer) Display.class.getMethod("getRawWidth").invoke(d);
    heightPixels = (Integer) Display.class.getMethod("getRawHeight").invoke(d);
} catch (Exception ignored) {
}
// includes window decorations (statusbar bar/menu bar)
if (Build.VERSION.SDK_INT >= 17)
try {
    Point realSize = new Point();
    Display.class.getMethod("getRealSize", Point.class).invoke(d, realSize);
    widthPixels = realSize.x;
    heightPixels = realSize.y;
} catch (Exception ignored) {
}

62
2018-03-29 08:15



Untuk mengakses ketinggian bilah status untuk perangkat Android, kami lebih memilih cara terprogram untuk mendapatkannya:

Kode sampel

int resId = getResources().getIdentifier("status_bar_height", "dimen", "android");
if (resId > 0) {
    result = getResources().getDimensionPixelSize(resId);
}

Variabel result memberi tinggi pada pixel.

Untuk akses cepat

Enter image description here

Untuk informasi lebih lanjut tentang ketinggian Title bar, Navigation bar dan Content View, silakan lihat Ukuran Layar Perangkat Android.


43
2017-08-27 13:12



Cara paling sederhana:

 int screenHeight = getResources().getDisplayMetrics().heightPixels;
 int screenWidth = getResources().getDisplayMetrics().widthPixels; 

42
2017-11-26 10:47