2015-02-09 26 views
5

Şeffaf bir gezinti çubuğu ile bir Android uygulaması yazıyorum. Düzeni uygun şekilde ayarlamak için, cihazın yazılım veya donanım düğmeleri olup olmadığını bilmem gerekiyor.Android cihazında yazılım veya donanım gezinme düğmeleri var kontrol edin

boolean hasMenuKey = ViewConfiguration.get(context).hasPermanentMenuKey(); 

Bu yaklaşım Samsung Note 4 veya bir menü tuşuna yok HTC One gibi bazı yeni cihazlarda çalışmıyor, ama yine de var: Araştırmalarım sırasında

aşağıdaki çözümleri rastladım donanım düğmeleri. Sony Xperia Z3 Anlaşma gibi bazı cihazlar return true çünkü bir yazılım navigasyon çubuğu vardır ancak bu, hem de çalışmaz

boolean hasBackKey = KeyCharacterMap.deviceHasKey(KeyEvent.KEYCODE_BACK); 
boolean hasHomeKey = KeyCharacterMap.deviceHasKey(KeyEvent.KEYCODE_HOME); 
boolean hasHardwareButtons = hasBackKey && hasHomeKey; 

.

Fiziksel düğmelerin veya yazılım gezinme çubuğunun bulunup bulunmadığını öğrenmenin güvenilir bir yolu var mı?

+3

olası yinelenen http://stackoverflow.com/questions/14853039/how-to ([bir android cihaz sabit tuşlar olup olmadığını nasıl anlarsınız] -tell-ister-bir-android-cihaz-zor-tuşları var) –

cevap

5

Bkz. this answer. Ekranın gerçek yüksekliğini piksel olarak elde edip, daha sonra uygulamanız için mevcut olan yüksekliği elde edebilir ve cihazın bu değerler ile ekran üzerinde gezinme çubuğu olup olmadığını öğrenebilirsiniz.

+0

Teşekkürler, ben bu soruyu bulamadık. İşe yaradı :) – Phoca

1

Gönderilen cevap here hile yaptı. Sadece şeyiyle burada şimdi kullanıyorum kodu: ait

private static boolean hasImmersive; 
private static boolean cached = false; 

@SuppressLint ("NewApi") 
public static boolean hasImmersive(Context ctx) { 

    if (!cached) { 
     if(Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) { 
      hasImmersive = false; 
      cached = true; 
      return false; 
     } 
     Display d = ((WindowManager) ctx.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); 

     DisplayMetrics realDisplayMetrics = new DisplayMetrics(); 
     d.getRealMetrics(realDisplayMetrics); 

     int realHeight = realDisplayMetrics.heightPixels; 
     int realWidth = realDisplayMetrics.widthPixels; 

     DisplayMetrics displayMetrics = new DisplayMetrics(); 
     d.getMetrics(displayMetrics); 

     int displayHeight = displayMetrics.heightPixels; 
     int displayWidth = displayMetrics.widthPixels; 

     hasImmersive = (realWidth > displayWidth) || (realHeight > displayHeight); 
     cached = true; 
    } 

    return hasImmersive; 
} 
İlgili konular