(システム全体のUIではなく)アクティビティでナビゲーションバーを永続的に非表示にしたい。今、私はこのコードを使用しています
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
バーを非表示にしますが、ユーザーが画面に触れると再び表示されます。アクティビティonStop()
;まで永久に隠す方法はありますか?
スニペット:
HideNavigationBarComponent.Java
これはAndroid用です4.4 +
没入モードを試してください https://developer.Android.com/training/system-ui/immersive.html
高速スニペット(Activityクラスの場合):
private int currentApiVersion;
@Override
@SuppressLint("NewApi")
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
currentApiVersion = Android.os.Build.VERSION.SDK_INT;
final int flags = 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_IMMERSIVE_STICKY;
// This work only for Android 4.4+
if(currentApiVersion >= Build.VERSION_CODES.KitKat)
{
getWindow().getDecorView().setSystemUiVisibility(flags);
// Code below is to handle presses of Volume up or Volume down.
// Without this, after pressing volume buttons, the navigation bar will
// show up and won't hide
final View decorView = getWindow().getDecorView();
decorView
.setOnSystemUiVisibilityChangeListener(new View.OnSystemUiVisibilityChangeListener()
{
@Override
public void onSystemUiVisibilityChange(int visibility)
{
if((visibility & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0)
{
decorView.setSystemUiVisibility(flags);
}
}
});
}
}
@SuppressLint("NewApi")
@Override
public void onWindowFocusChanged(boolean hasFocus)
{
super.onWindowFocusChanged(hasFocus);
if(currentApiVersion >= Build.VERSION_CODES.KitKat && hasFocus)
{
getWindow().getDecorView().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_IMMERSIVE_STICKY);
}
}
音量を上げるまたは音量を下げるときにナビゲーションバーに表示される問題がある場合。 onCreate
にコードを追加しました setOnSystemUiVisibilityChangeListener を参照してください
関連する別の質問を次に示します。
これを行う。
public void FullScreencall() {
if(Build.VERSION.SDK_INT > 11 && Build.VERSION.SDK_INT < 19) { // lower api
View v = this.getWindow().getDecorView();
v.setSystemUiVisibility(View.GONE);
} else if(Build.VERSION.SDK_INT >= 19) {
//for new api versions.
View decorView = getWindow().getDecorView();
int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
decorView.setSystemUiVisibility(uiOptions);
}
}
これは100%動作し、遅いバージョンのAPIでも同じことができます。遅い回答であっても、他の人の助けになることを願っています。
これを永続的にしたい場合は、FullscreenCall()
メソッド内でonResume()
を呼び出すだけです。
つかいます:-
view.setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
Android 4+を実行しているタブレットでは、システム/ナビゲーションバーを非表示にすることはできません。
ドキュメント から:
SYSTEM_UI_FLAG_HIDE_NAVIGATIONは、ナビゲーションバーを完全に非表示にすることを要求する新しいフラグです。これは、一部の携帯電話で使用されるナビゲーションバーでのみ機能することに注意してください(タブレットのシステムバーは非表示になりません)。
ナビゲーションバーを永久に隠すことはできないと思います(私の知る限り)。
ただし、1つのトリックを実行できます。そのトリックの心。
ユーザーが画面に触れると、navigation bar
が表示されます。すぐに非表示にします。その楽しみ。
これを確認してください。
void setNavVisibility(boolean visible) {
int newVis = SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| SYSTEM_UI_FLAG_LAYOUT_STABLE;
if (!visible) {
newVis |= SYSTEM_UI_FLAG_LOW_PROFILE | SYSTEM_UI_FLAG_FULLSCREEN
| SYSTEM_UI_FLAG_HIDE_NAVIGATION;
}
// If we are now visible, schedule a timer for us to go invisible.
if (visible) {
Handler h = getHandler();
if (h != null) {
h.removeCallbacks(mNavHider);
if (!mMenusOpen && !mPaused) {
// If the menus are open or play is paused, we will not auto-hide.
h.postDelayed(mNavHider, 1500);
}
}
}
// Set the new desired visibility.
setSystemUiVisibility(newVis);
mTitleView.setVisibility(visible ? VISIBLE : INVISIBLE);
mPlayButton.setVisibility(visible ? VISIBLE : INVISIBLE);
mSeekView.setVisibility(visible ? VISIBLE : INVISIBLE);
}
この詳細については、こちらをご覧ください。
そのセキュリティ問題: https://stackoverflow.com/a/12605313/1303691
したがって、ビューの作成の開始時に1回の呼び出しでタブレットのナビゲーションを永続的に非表示にすることはできません。非表示になりますが、画面に触れるとポップアップ表示されます。したがって、画面を2回タッチするだけで、レイアウトでonClickEventが発生する可能性があります。したがって、この呼び出しをインターセプトする必要がありますが、まだ管理していません。見つかったときに答えを更新します。それとも、あなたはすでに答えをすでに持っていますか?
打撃コードはあなたを助け、setContentView()の前にそれらのコードを追加すると思います
getWindow().setFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS, WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
SetContentView()getWindow()。getDecorView()。setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE);の背後にあるこれらのコードを追加します。
多くの優れた具体的な詳細がここにレイアウトされています: フルスクリーンモードを有効にする
これは公式のGoogle/Androidリンクですので、「質問に答えずにリンクを貼り付けるだけ」で私に投票しないでください。
これを試して。
View decorView = getWindow().getDecorView();
int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_FULLSCREEN;
decorView.setSystemUiVisibility(uiOptions);
それが役立つかどうか教えてください... :)
それは私の解決策です:
まず、ナビゲーションバーが表示されるかどうかを示すブール値を定義します。
boolean navigationBarVisibility = true //because it's visible when activity is created
ナビゲーションバーを非表示にする2番目の作成メソッド。
private void setNavigationBarVisibility(boolean visibility){
if(visibility){
View decorView = getWindow().getDecorView();
int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_FULLSCREEN;
decorView.setSystemUiVisibility(uiOptions);
navigationBarVisibility = false;
}
else
navigationBarVisibility = true;
}
デフォルトでは、ナビゲーションバーを非表示にした後にアクティビティをクリックすると、ナビゲーションバーが表示されます。表示されている場合は非表示にします。
OnClickListenerをビューに設定します。私はSurfaceViewを使用しているので、私にとっては:
playerSurface.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
setNavigationBarVisibility(navigationBarVisibility);
}
});
また、アクティビティの起動時にこのメソッドを呼び出す必要があります。初めに隠したいからです。
setNavigationBarVisibility(navigationBarVisibility);