質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

解決済

1回答

4462閲覧

メニューを表示する毎に、ナビゲーションバーの表示と非表示が繰り返されてしまいます

Wind

総合スコア442

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

0クリップ

投稿2019/02/19 02:13

編集2019/02/19 05:18

#症状
ナビゲーションバーの表示フラグを非表示にしていても、メニューを表示して選択せずに閉じると、
ナビゲーションバーの表示と非表示を繰り返されてしまいます。

##やりたいこと
ナビゲーションバーの表示フラグをfalse(非表示)にしている時は、メニュー表示を選択せずに閉じた後、常に非表示になって欲しい。
(ボタンを押してフラグをtrue(表示)にした時は、ナビゲーションバーが常に表示されている)

##再現手順
1.アプリ起動(ナビゲーションバーが隠れる)
2.「︙」を押してメニューを開く(ナビゲーションバーが表示される)
3.メニュー以外の場所を押して、メニューを選択せずに閉じる
→ナビゲーションバーは表示されたまま
4.メニュー以外の場所を押して、メニューを選択せずに閉じる
→ナビゲーションバーは非表示になる(隠れる)
以降、3と4を繰り返されてしまう(ナビゲーションバーの表示と非表示を繰り返されてしまう)

※備考
ボタンを押して表示フラグをtrueにした時は、3と4を繰り返しても常に表示されます。

#ソースコード
activity_main.xml

XML

1<?xml version="1.0" encoding="utf-8"?> 2<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 xmlns:app="http://schemas.android.com/apk/res-auto" 4 xmlns:tools="http://schemas.android.com/tools" 5 android:layout_width="match_parent" 6 android:layout_height="match_parent" 7 tools:context="test.menu_test.MainActivity"> 8 9 <Button 10 android:id="@+id/btnChange" 11 android:layout_width="wrap_content" 12 android:layout_height="wrap_content" 13 android:text="Flag Change" 14 app:layout_constraintBottom_toBottomOf="parent" 15 app:layout_constraintLeft_toLeftOf="parent" 16 app:layout_constraintRight_toRightOf="parent" 17 app:layout_constraintTop_toTopOf="parent" /> 18 19</android.support.constraint.ConstraintLayout>

test_menu.xml

XML

1<?xml version="1.0" encoding="utf-8"?> 2<menu xmlns:android="http://schemas.android.com/apk/res/android" 3 xmlns:app="http//schemas.android.com/apk/res-auto" 4 xmlns:tools="http://schemas.android.com/tools" tools:context=".MainActivity"> 5 6 <item 7 android:id="@+id/action_settings" 8 android:title="Setting" 9 android:orderInCategory="100" 10 app:showAsAction="never" 11 /> 12 <item 13 android:id="@+id/action_license" 14 android:title="License" 15 android:orderInCategory="101" 16 app:showAsAction="never" 17 /> 18</menu>

MainActivity.java

Java

1public class MainActivity extends AppCompatActivity { 2 boolean bolNavigation_Flag = false; // ナビゲーションバー表示フラグ(デフォルトは非表示) 3 4 @Override 5 protected void onCreate(Bundle savedInstanceState) { 6 super.onCreate(savedInstanceState); 7 setContentView(R.layout.activity_main); 8 9 Button _btnChange = findViewById(R.id.btnChange); // 変更ボタン 10 _btnChange.setOnClickListener(new View.OnClickListener(){ 11 @Override 12 public void onClick(View v) { 13 bolNavigation_Flag = !bolNavigation_Flag; // ナビゲーションバー表示フラグを反転 14 subNavigationBar(); 15 } 16 }); 17 } 18 19 // オプションメニューを作成する 20 public boolean onCreateOptionsMenu(Menu menu){ 21 // menuにcustom_menuレイアウトを適用 22 getMenuInflater().inflate(R.menu.test_menu, menu); 23 return true; 24 } 25 26 // メニューボタンの制御 27 @Override 28 public boolean onPrepareOptionsMenu(Menu menu) { 29 super.onPrepareOptionsMenu(menu); 30 31 MenuItem menu_settings = menu.findItem(R.id.action_settings); 32 MenuItem menu_license = menu.findItem(R.id.action_license); 33 // フラグがfalseの時は押せなくする 34 menu_settings.setEnabled(bolNavigation_Flag); 35 menu_license.setEnabled(bolNavigation_Flag); 36 subNavigationBar(); // ナビゲーションバーの制御 37 38 return true; 39 } 40 41 // メニュー選択時の処理(テストなのでトースト表示) 42 public boolean onOptionsItemSelected(MenuItem menuItem){ 43 Toast toast; 44 45 // 押されたメニューのIDで処理を振り分ける 46 switch (menuItem.getItemId()){ 47 case R.id.action_settings: 48 toast = Toast.makeText(MainActivity.this, "設定を選択", Toast.LENGTH_SHORT); 49 break; 50 case R.id.action_license: 51 toast = Toast.makeText(MainActivity.this, "ライセンスを選択", Toast.LENGTH_SHORT); 52 break; 53 default: 54 toast = Toast.makeText(MainActivity.this, "その他を選択", Toast.LENGTH_SHORT); 55 break; 56 } 57 toast.show(); 58// subNavigationBar(); // メニュー選択後に制御する場合 59 return true; 60 } 61 62 // ナビゲーションバーの表示/非表示 63 private void subNavigationBar(){ 64 View decor = getWindow().getDecorView(); 65 if(bolNavigation_Flag){ // 表示 66 decor.setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE ); // 表示にする 67 }else{ // 非表示 68 decor.setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY); // 自動的に隠れる 69 } 70 } 71}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

onPrepareOptionsMenu 内の subNavigationBar(); を消して onCreate の最後に入れ, getWindow().getDecorView().getSystemUiVisibility() を表示した所, メニュー表示時に View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY(0x1000) は有りましたが View.SYSTEM_UI_FLAG_HIDE_NAVIGATION(0x2) が無くなっていました.
何処かで解除されているようです.
onCreate に以下のコードを追加すると, おそらくご希望の動作と思います.
が, もっときちんとした対処方法があるかもしれません.

java

1 final View decor = getWindow().getDecorView(); 2 decor.setOnSystemUiVisibilityChangeListener(new View.OnSystemUiVisibilityChangeListener() { 3 @Override 4 public void onSystemUiVisibilityChange(int visibility) { 5 //SYSTEM_UI_FLAG_HIDE_NAVIGATION の有無を bolNavigation_Flag にあわせる. 6 int flag = bolNavigation_Flag ? 0 : View.SYSTEM_UI_FLAG_HIDE_NAVIGATION; 7 if((visibility & View.SYSTEM_UI_FLAG_HIDE_NAVIGATION) != flag) { 8 decor.setSystemUiVisibility((decor.getSystemUiVisibility() & ~View.SYSTEM_UI_FLAG_HIDE_NAVIGATION) | flag); 9 } 10 } 11 });

投稿2019/02/19 06:22

編集2019/02/19 06:25
jimbe

総合スコア12632

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Wind

2019/02/19 07:09

確認ありがとうございます! メニュー以外にも画面OFFやホームボタン等でもView.SYSTEM_UI_FLAG_HIDE_NAVIGATION(0x2)が解除されていました。 本来であれば解除を個別に対処すべきなのかもしれませんが、解除される因子が多い為、 書いて頂いたコードを参考に、解除される毎に訂正するようにすることで解決しました。 ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問