Dapatkan layar dimensi dalam piksel

Saya membuat beberapa elemen kustom, dan saya ingin pemrograman menempatkan mereka ke sudut kanan atas (n piksel dari tepi atas dan m piksel dari tepi kanan). Oleh karena itu saya perlu untuk mendapatkan layar lebar dan tinggi layar dan kemudian mengatur posisi:

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

Bagaimana cara saya mendapatkan screenWidth dan screenHeight dalam Kegiatan utama?

Mengomentari pertanyaan (5)
Larutan

Jika anda ingin menampilkan dimensi dalam piksel yang 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're tidak dalam suatu Aktivitas anda bisa mendapatkan default Display melalui WINDOW_SERVICE:

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

Jika anda berada di sebuah fragmen dan ingin acomplish ini hanya menggunakan Aktivitas.Wm_ net (di Xamarin.Android) atau getActivity().getWindowManager() (di jawa).

Sebelum getSize diperkenalkan (di API level 13), anda bisa menggunakan getWidth dan getHeight metode yang sekarang usang:

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

Untuk kasus penggunaan anda're menggambarkan namun, margin/padding dalam tata letak tampaknya lebih tepat.

Cara lain adalah: DisplayMetrics

struktur menggambarkan informasi umum tentang display, seperti ukuran, kepadatan, dan huruf scaling. Untuk mengakses DisplayMetrics anggota, menginisialisasi sebuah objek seperti ini:

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

Kita dapat menggunakan widthPixels untuk mendapatkan informasi untuk:

"mutlak lebar layar dalam piksel."

Contoh:

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

Salah satu cara adalah:

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

Itu usang, dan anda harus mencoba kode berikut sebagai gantinya. Dua baris pertama dari kode yang memberi anda DisplayMetrics objecs. Benda-benda ini berisi bidang-bidang seperti heightPixels, widthPixels.

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

int height = metrics.heightPixels;
int width = metrics.widthPixels;
Komentar (10)

Ini mungkin tidak menjawab pertanyaan anda, tapi itu bisa berguna untuk tahu (saya cari sendiri ketika saya datang untuk pertanyaan ini) bahwa jika anda perlu Melihat's dimensi tapi kode ini akan dieksekusi ketika tata letak yang belum ditata belum (misalnya di onCreate() ) anda dapat men-setup sebuah ViewTreeObserver.OnGlobalLayoutListener dengan Lihat.getViewTreeObserver().addOnGlobalLayoutListener() dan menempatkan kode yang relevan yang perlu di lihat's dimensi yang ada. Pendengar's callback yang akan dipanggil saat tata letak akan telah ditata.

Komentar (9)

(2012 jawaban, mungkin out of date) Jika anda ingin mendukung pra Honeycomb, anda akan perlu untuk dimasukkan ke dalam kompatibilitas 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 tak berlaku lagi metode yang pada akhirnya akan diambil dari yang paling baru-baru Sdk, tapi sementara kita masih mengandalkan sebagian besar pengguna kami memiliki Android 2.1, 2.2 dan 2.3, ini adalah apa yang tersisa untuk kita.

Komentar (2)

Saya telah mencoba semua kemungkinan "solusi" gagal dan saya melihat bahwa Elliott Hughes', "Dalvik Explorer" app selalu menunjukkan dimensi yang benar pada perangkat Android/OS versi. Akhirnya aku melihat-nya proyek open source yang dapat ditemukan di sini: https://code.google.com/p/enh/

Berikut ini's 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: sedikit peningkatan versi (menghindari menembak pengecualian pada non-didukung versi OS):

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) {
}
Komentar (7)

Cara paling sederhana:

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

Untuk mengakses ketinggian status bar untuk perangkat Android, kita lebih memilih cara program untuk mendapatkan ini:

Contoh kode

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

Variabel hasil memberikan tinggi dalam pixel.

Untuk akses cepat

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

Komentar (2)

Pertama mendapatkan pemandangan (misalnya. oleh findViewById()) dan kemudian anda dapat menggunakan getWidth() di lihat sendiri.

Komentar (2)

Saya memiliki dua fungsi, satu untuk mengirim konteks dan lain semakin tinggi dan lebar dalam pixel:

public static int getWidth(Context mContext){
    int width=0;
    WindowManager wm = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE);
    Display display = wm.getDefaultDisplay();
    if(Build.VERSION.SDK_INT>12){
        Point size = new Point();
        display.getSize(size);
        width = size.x;
    }
    else{
        width = display.getWidth();  // Deprecated
    }
    return width;
}

dan

public static int getHeight(Context mContext){
    int height=0;
    WindowManager wm = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE);
    Display display = wm.getDefaultDisplay();
    if(Build.VERSION.SDK_INT>12){
        Point size = new Point();
        display.getSize(size);
        height = size.y;
    }
    else{
        height = display.getHeight();  // Deprecated
    }
    return height;
}
Komentar (2)

Isn't ini solusi yang jauh lebih baik? DisplayMetrics dilengkapi dengan semua yang anda butuhkan dan bekerja dari API 1.

public void getScreenInfo(){
    DisplayMetrics metrics = new DisplayMetrics();
    getActivity().getWindowManager().getDefaultDisplay().getMetrics(metrics);

    heightPixels = metrics.heightPixels;
    widthPixels = metrics.widthPixels;
    density = metrics.density;
    densityDpi = metrics.densityDpi;
}

Anda juga bisa mendapatkan tampilan yang sebenarnya (termasuk layar dekorasi, seperti Status Bar atau perangkat lunak navigasi) dengan menggunakan getRealMetrics, tapi ini bekerja pada 17+ only.

Aku kehilangan sesuatu?

Komentar (1)

Untuk secara dinamis scaling menggunakan XML ada atribut yang disebut "android:layout_weight"

Di bawah ini contoh, dimodifikasi dari synic's respon pada ini thread, menunjukkan tombol yang memakan 75% dari layar (berat = .25) dan tampilan teks yang mengambil sisa 25% dari layar (berat = .75).






Komentar (0)

Ini adalah kode yang saya gunakan untuk tugas:

// `activity` is an instance of Activity class.
Display display = activity.getWindowManager().getDefaultDisplay();
Point screen = new Point();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2) {
    display.getSize(screen);
} else {            
    screen.x = display.getWidth();
    screen.y = display.getHeight();
}

Tampaknya cukup bersih namun, mengurus bantahan.

Komentar (0)

Hanya menambah Francesco's jawaban. Para pengamat lain yang lebih tepat, jika anda ingin mengetahui lokasi di jendela atau lokasi di layar ViewTreeObserver.OnPreDrawListener()

Hal ini juga dapat digunakan untuk menemukan atribut-atribut lain dari pandangan yang sebagian besar tidak diketahui pada onCreate() waktu misalnya menggulir posisi, skala posisi.

Komentar (0)

Menemukan lebar dan tinggi layar:

width = getWindowManager().getDefaultDisplay().getWidth();
height = getWindowManager().getDefaultDisplay().getHeight();

Dengan menggunakan ini, kita bisa mendapatkan yang terbaru dan di atas SDK 13.

// New width and height
int version = android.os.Build.VERSION.SDK_INT;
Log.i("", " name == "+ version);
Display display = getWindowManager().getDefaultDisplay();
int width;
if (version >= 13) {
    Point size = new Point();
    display.getSize(size);
    width = size.x;
    Log.i("width", "if =>" +width);
}
else {
    width = display.getWidth();
    Log.i("width", "else =>" +width);
}
Komentar (0)

Menggunakan kode berikut dalam Aktivitas.

DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
int height = metrics.heightPixels;
int wwidth = metrics.widthPixels;
Komentar (0)
DisplayMetrics dimension = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dimension);
int w = dimension.widthPixels;
int h = dimension.heightPixels;
Komentar (0)

Perlu untuk mengatakan, bahwa jika anda tidak berada dalam Kegiatan, tapi di View (atau variabel Melihat jenis dalam lingkup anda), ada tidak perlu menggunakan WINDOW_SERVICE. Kemudian anda dapat menggunakan setidaknya dua cara.

Pertama:

DisplayMetrics dm = yourView.getContext().getResources().getDisplayMetrics();

Kedua:

DisplayMetrics dm = new DisplayMetrics();
yourView.getDisplay().getMetrics(dm);

Semua metode ini kami sebut di sini adalah tidak usang.

Komentar (0)

Saya menemukan ini melakukan trik.

Rect dim = new Rect();
getWindowVisibleDisplayFrame(dim);
Komentar (1)
public class AndroidScreenActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        DisplayMetrics dm = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(dm);
        String str_ScreenSize = "The Android Screen is: "
                                   + dm.widthPixels
                                   + " x "
                                   + dm.heightPixels;

        TextView mScreenSize = (TextView) findViewById(R.id.strScreenSize);
        mScreenSize.setText(str_ScreenSize);
    }
}
Komentar (0)

Untuk mendapatkan dimensi layar menggunakan layar metrices

DisplayMetrics displayMetrics = new DisplayMetrics();
if (context != null) 
      WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
      Display defaultDisplay = windowManager.getDefaultDisplay();
      defaultDisplay.getRealMetrics(displayMetrics);
    }

Mendapatkan tinggi dan lebar dalam pixel

int width  =displayMetrics.widthPixels;
int height =displayMetrics.heightPixels;
Komentar (0)