2011-05-04 23 views
29

Uygulamanın aygıtta kullanabileceği ekran dikdörtgeninin boyutlarını almam gerekiyor.Ekran metrikleri eksi durum çubuğu?

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

Benim sorunum bana bütün ekranın yüksekliği sağlar ve ekran uygulaması kullanamazsınız üstünde bir "durum/bildirim" bar olmasıdır: Bunun için ben kullanarak çalıştı.

Uygulamanın kullanabileceği genel boyuta ihtiyacım var.

ben bir görüntü bırakacağım daha iyi soru anlamanıza yardımcı olmak için:

enter image description here

cevap

37

tüm bu büyük hüner genellikle bu görünüm en gerçek değerine erişmek edemezler düzen tamamlanana kadar boyut. Hangi onCreate() (ve genellikle OnResume() da), hesaplama yapmak için işlemin çok erken anlamına gelir. Aşağıdaki kod hangi onun yüksekliği ve genişliği inceleyebilir etmektedir, Kim Activity içeriği görünüşünü temsil eden bir görünüm alacak:

Bu aynı zamanda Activity ayarlanır olabilecek başlıktaki görünümleri için hesapları
View content = getWindow().findViewById(Window.ID_ANDROID_CONTENT); 
Log.d("DISPLAY", content.getWidth() + " x " + content.getHeight()); 

. Ayrıca, XML şişirildiğinde içerik görünümü olarak ayarladığınız kök düzenine bir başvuru alabilir ve bu düzen her iki boyutta da fill_parent olarak ayarlanmışsa aynı şeyi gerçekleştirebilirsiniz.

Sık sık bu gibi çağrıları yaptığım iyi bir yöntem, Etkinliğinizin yalnızca kullanıcı tarafından görülebileceği noktada çağrılacak olan onWindowFocusChanged() dur.

Bu yardımcı olur umarım!

+0

Bu çalışırsa, yalnızca benim sorun çözüldü olmazdı ama kodumu çok azaltılacak. Ben büyük bir geri dönen olmadı görünümleri ile birçok sorunları yaşadım, fillParent ve MatchParent kullanıldı. –

+0

Bu bana tüm ekran ölçümlerini (daha önce aldığım aynı değerler) veriyor, ancak MATCH_PARENT, MATCH_PARENT ve üst ekranın kullanılabilecek kısmı olan bir galeri boyutumu almamı sağladı. istediğimi almak için. Çok teşekkür ederim, bunu uzun zamandır çözmeyi deniyorum. –

+1

Arama yapmak için güzel ipucu onWindowFocusChanged() '. Başlangıçta görüşlerin ölçülmesini sağlayan bir yöntem bulmak için çaresizdim. –

2

Bu çağrı diyorsunuz zaman noktasında bağımsızdır:

... 
Point dimensions = getDisplayDimensions(context); 
int width = dimensions.x; 
int height = dimensions.y; 
... 

@NonNull 
public static Point getDisplayDimensions(Context context) 
{ 
    WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); 
    Display display = wm.getDefaultDisplay(); 

    DisplayMetrics metrics = new DisplayMetrics(); 
    display.getMetrics(metrics); 
    int screenWidth = metrics.widthPixels; 
    int screenHeight = metrics.heightPixels; 

    // find out if status bar has already been subtracted from screenHeight 
    display.getRealMetrics(metrics); 
    int physicalHeight = metrics.heightPixels; 
    int statusBarHeight = getStatusBarHeight(context); 
    int navigationBarHeight = getNavigationBarHeight(context); 
    int heightDelta = physicalHeight - screenHeight; 
    if (heightDelta == 0 || heightDelta == navigationBarHeight) 
    { 
     screenHeight -= statusBarHeight; 
    } 

    return new Point(screenWidth, screenHeight); 
} 

public static int getStatusBarHeight(Context context) 
{ 
    Resources resources = context.getResources(); 
    int resourceId = resources.getIdentifier("status_bar_height", "dimen", "android"); 
    return (resourceId > 0) ? resources.getDimensionPixelSize(resourceId) : 0; 
} 

public static int getNavigationBarHeight(Context context) 
{ 
    Resources resources = context.getResources(); 
    int resourceId = resources.getIdentifier("navigation_bar_height", "dimen", "android"); 
    return (resourceId > 0) ? resources.getDimensionPixelSize(resourceId) : 0; 
} 

hilesi ekran ölçümlerini (durum çubuğu modulo istediğini) ve "gerçek ölçümlerini" karşılaştırır yani, cihazın fiziksel pikselleri hangisidir.

Durum çubuğunun yüksekliği, daha sonra gerçekleşmemişse, geçici olarak çıkarılır.

(benim testlerde geri içeren gezinti çubuğu (ve ev düğmeleri) zaten çıkarılmıştır.)

İlgili konular