#症状
ナビゲーションバーの表示フラグを非表示にしていても、メニューを表示して選択せずに閉じると、
ナビゲーションバーの表示と非表示を繰り返されてしまいます。
##やりたいこと
ナビゲーションバーの表示フラグを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}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/02/19 07:09