2012-03-29 64 views
20

我想擴展關於在Android冰淇淋三明治(4.0及更高版本)平板電腦屏幕底部隱藏系統/導航欄的討論設備。有沒有辦法隱藏安卓系統中的系統/導航欄ICS

已經有一個線程(Is there a way to hide the system bar in Android 3.0? It's an internal device and I'm managing navigation)關於隱藏蜂巢設備上的酒吧。然而,我的客戶將使用最新的冰淇淋三明治設備,並非常熱衷於將屏幕隱藏在屏幕底部。他們的應用不適合一般消費者使用,他們接管整個屏幕以提供他們的體驗非常重要。如何隱藏這個欄 - 或者至少覆蓋所有按鈕的行爲 - 沒有植入設備或重寫它的固件?

+1

可能重複?這是一個內部設備,我正在管理導航](http://stackoverflow.com/questions/5109988/is-there-a-way-to-hide-the-system-bar-in-android-3-0-它的內部設備an) - Honeycomb的答案仍然適用於ICS – WarrenFaith 2012-03-29 13:54:31

+1

看起來Honeycomb和ICS WRT System Bar之間存在顯着差異。請參閱http://android.serverbox.ch/?p=306,特別是2011年12月29日17:20 – user316117 2012-04-10 16:44:47

+0

的回覆他指出4.0及以上。 Google的虛擬現實技術已經導致了一種新的模式,存在於4.4 請參閱下面關於沉浸模式的評論。 https://developer.android.com/training/system-ui/immersive.html – 2015-02-03 02:09:12

回答

24

檢出SYSTEM_UI_FLAG_HIDE_NAVIGATION,該標誌隱藏導航欄,直到用戶與設備進行交互。它是在Android 4.0中引入的。您可以啓用這個標誌,例如像這樣:

getWindow().getDecorView() 
      .setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION); 

注意,導航就不會再自動消失,你必須每次設置用戶與設備交互之後。

或者,您可以通過使用SYSTEM_UI_FLAG_LOW_PROFILE使導航不那麼突兀,這會將按鈕更改爲小點(例如像相機應用程序)

+1

我們試過這個。 ApiDemos冰淇淋三明治有一個屏幕,循環顯示SystemUiVisibility的不同選項。當我們嘗試SYSTEM_UI_FLAG_HIDE_NAVIGATION時沒有任何反應。你認爲這種行爲可能取決於設備嗎?我們在華碩Transformer Prime上試了一下。 – 2012-03-29 14:23:38

+0

我只是在模擬器中試過,它在那裏工作,如上所述。我現在只擁有一個帶有硬件鍵的舊HTC,因此我無法在真實的設備上測試它。可能是設備依賴,不能肯定地說。 – 2012-03-29 14:41:12

+0

作品,但從文檔「有一個限制:因爲導航控件是如此重要,最少的用戶交互將導致他們立即重新出現。」即一旦用戶觸摸屏幕,他們就回彈。 – weston 2013-08-24 09:50:35

1

隱藏在android系統的IC狀態欄和導航欄使用

LinearLayout layout = (LinearLayout)findViewById(R.id.layout); 
layout.setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION); 
+1

嘗試這個,但它仍然沒有'不要爲我隱藏導航欄 – 2012-11-17 13:01:55

3

更新 - 有圍繞可用於這樣的情況下(手動設置客戶端的應用程序)工作。的確,導航欄不能在給定框架內移除。

但是,有一個解決方案來隱藏導航欄,如果生根器是一個選項爲您。這裏是如何:

Root device

Install and run Busybox

Install HideBar

在HideBar有在「亭」模式運行的選項,其中有沒有辦法重新顯示導航欄。不用說,你真的需要小心這一點。

涉及的風險:

  • 砌體設備

  • 越來越安裝BusyBox的錯誤,這可能讓事情有點棘手,雖然是不太可能導致信息丟失。

  • 陷入僵局,你無法退出你的應用程序。例如,如果1您的GUI不提供關閉選項,2您的應用程序在啓動時自動啓動,3 HideBar不允許任何重新顯示導航欄的方式,4 HideBar在啓動時隱藏導航欄。這可以通過簡單地停止/卸載你的應用程序從adb克服。

這裏有其他相同的問題:

+0

我想確認在非固定的ICS平板電腦上真的不可能。是否真的沒有真正的全屏應用程序在市場上的非根植ICS平板電腦(不是默認的應用程序從分銷商出貨,他們可以使用自定義固件來達到目的,我想要一般的應用程序)?如果它確實存在,請告訴我。 – Yeung 2012-12-05 05:37:27

+0

@神貓我認爲非rooter ICS平板電腦最着名的應用程序是「SureLock」:http://www.42gears.com/surelock/它有一個免費版本,但它有一些限制。如果您嘗試 - 如果您可以成功使用它,請分享一下嗎? – 2012-12-05 07:36:29

+2

「SureLock」有兩個選項。 「禁用底部欄」和「隱藏按鈕欄」。請參閱[鏈接](http://www.42gears.com/blog/wp-content/uploads/2012/02/disable-bottom-bar.jpg)。 「禁用」不需要root,但欄仍然存在。這只是讓酒吧觸摸不生效。而對於「隱藏」,它需要根。 – Yeung 2012-12-05 10:17:40

-2

如果你的設備是植根這個代碼將會幫助你隱藏ICS系統吧(我測試了三星Galaxy Tab 2它工作出色):

ArrayList<String> list = new ArrayList<String>(); 
Map<String, String> env = System.getenv(); 
for (String envName : env.keySet()) { 
    list.add(envName + "=" + env.get(envName)); 
} 

// Array containing the environment to start the new process in 
String[] envp = (String[]) list.toArray(new String[0]); 

String hidingCommand = "while [ true ]\n" + "do\n" + "killall com.android.systemui\n" + "done\n"; 
Runtime.getRuntime().exec(new String[] { "su", "-c", command }, envp); 

myContext.sendBroadcast(new Intent("com.mycompany.myapp.ACTION_BARHIDDEN")); 
0

將此代碼放在您的應用程序標記清單文件隱藏默認標籤欄

<Application 
android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen" <!-- 
other parameters of application tag--> 
> 

和再做出線性或相對佈局,並把它放在你的活動佈局。

+1

這實際上不會刪除導航欄,而只是標題欄。 – medonja 2013-04-05 16:10:40

0

除非將設備植入設備,否則無法將其隱藏。但是,當然有一種解決方法可能不符合您的要求,但目前市場上的一些衆所周知的應用程序正在使用此策略爲其應用程序實現此禁用菜單欄功能。

  • 授予管理員權限。
  • 設置密碼&使用設備管理員配置文件api鎖定設備
  • 然後加載在原生鎖定屏幕頂部的UI。 (當然這會顯示背景鎖定屏幕,但是如果邏輯組織良好,那麼它會更加平滑,用戶不會注意到它)
  • 當需要啓用時,將密碼重置爲「」使用設備策略管理器對象的resetPassword(「」,0)。
1

編輯:從4.4(19)開始,您可以使用以下命令啓用所謂的「浸入式模式」。它是爲Google的Cardboard vrtoolkit引入的,但可以普遍使用。

setSystemUiVisibility(View.SYSTEM_UI_FLAG_IMMERSIVE)

https://developer.android.com/training/system-ui/immersive.html

從我的努力,似乎是: setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION) 不會在平板電腦上運行。

它可以在智能手機上使用(使用Nexus 4 Mako進行測試),但它會重新出現在觸摸/點擊事件中。 這也似乎捕捉焦點到酒吧,迫使你點擊兩次重新獲得焦點視圖。

我一直在試圖找到一種方法來捕獲實際上重新顯示酒吧的事件。沒有運氣。

固執己見,我將下載android os代碼,啓動eclipse調試器並啓動a-huntin。這不是一個錯誤 - 導航欄對應用程序生命週期至關重要。

我見過應用程序這樣做(遊戲等),所以有一種沒有生根的方法。

+0

這是哪個遊戲?它在Play商店中可用嗎? – Yeung 2013-10-21 05:02:43

+0

ww.standard3d.com – 2015-02-03 01:59:17

2

雖然這是一個hacky的解決方案,我認爲它值得關注,因爲不需要root設備: getWindow().getDecorView().setSystemUiVisibility(8);

+0

讓我想起。我認爲它不適用於所有平板電腦。我看到有自定義固件的平板電腦可以用這種silmiar方法隱藏欄,但它不是一般的。 – Yeung 2013-10-31 03:07:56

+1

這適用於我的平板電腦! – 2014-12-08 12:34:20

11

在已解鎖裝置,我使用下面的ADB命令

adb shell pm disable com.android.systemui 

永久隱藏導航欄。要再次顯示,運行

adb shell pm enable com.android.systemui 

到目前爲止,它的工作對我罰款

+0

當我運行這個禁用命令時,設備重新啓動。這是否發生在你身上? – Dallas187 2014-04-03 10:24:55

+0

是的,它確實:)重新啓動後,它工作正常,直到你再次啓用systemUI(並且設備將再次重啓以及) – 2014-04-07 01:54:41

+7

感謝您的反饋。重新啓動真的困擾着我,所以我使用以下命令來隱藏'adb shell服務調用活動42 s16 com.android.systemui' ,然後再次顯示這些條我執行這個命令: 'adb shell am startservice -n com.android.systemui/.SystemUIService'這種方法不需要重啓,我想我會與你分享,以防你更喜歡它。 – Dallas187 2014-04-07 08:25:47

4

使用下面的代碼是做隱藏導航

getWindow().getDecorView() 
      .setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION); 

的一種方式,但上述問題只要用戶觸摸屏幕,它就會變得可見。

在Android Kitkat中有一項名爲IMMERSIVE的功能,它隱藏了通知欄和導航。即使用戶與屏幕交互,它也不會顯示。但是,用戶可以通過從屏幕頂部向下滑動來使其可見。下面是代碼來實現它

//Initializew this in onCreate() 
View mDecorView = getWindow().getDecorView(); 

//Then call this function 
private void hideSystemUI() { 
    mDecorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE 
      | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION 
      | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN 
      | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION 
      | View.SYSTEM_UI_FLAG_FULLSCREEN 
      | View.SYSTEM_UI_FLAG_LOW_PROFILE 
      | View.SYSTEM_UI_FLAG_IMMERSIVE); 
} 

但是在我的情況下,我從來沒有想過的導航和通知欄是即使用戶從屏幕底部的頂部刷卡可見。我試了一下,我能夠部分實現它。我所做的是我實施了一個CountDownTimer,每秒鐘撥打hideSystemUI()。我知道這不是做這件事的最好方式。但我沒有得到任何其他解決方案來做到這一點。

如果有人獲得任何那麼請讓我知道如何永久隱藏導航和通知欄:)希望這個答案可以幫助一些一在未來:)

觀看視頻this更好地瞭解有關此功能。

0

可能是按鈕behavor是足夠多的,你可以看看我的回答here

你仍然有酒吧,但你不能沒有重啓平板電腦退出應用

0

您可以隱藏導航欄在Android 4.0及更高版本上使用SYSTEM_UI_FLAG_HIDE_NAVIGATION標誌。這段代碼都隱藏導航欄和狀態欄:

View decorView = getWindow().getDecorView(); 
// Hide both the navigation bar and the status bar. 
// SYSTEM_UI_FLAG_FULLSCREEN is only available on Android 4.1 and higher, but as 
// a general rule, you should design your app to hide the status bar whenever you 
// hide the navigation bar. 
int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION 
       | View.SYSTEM_UI_FLAG_FULLSCREEN; 
decorView.setSystemUiVisibility(uiOptions 

請參閱以下內容:Hiding the Navigation Bar

的[有沒有辦法隱藏在Android 3.0的系統欄