Android 操作栏选项菜单显示问题
Android Action Bar options menu display issue
好的,所以我遇到了一个小问题,我真的不知道如何解决这个问题。
所以我有一个应用程序,我在其中使用我自己的操作栏样式
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
<item name="windowActionModeOverlay">true</item>
<item name="actionBarStyle">@style/AppTheme.ActionBar</item>
<item name="android:textColorSecondary">@color/action_bar_bg</item>
</style>
<style name="AppTheme.ActionBar" parent="Widget.AppCompat.ActionBar">
<item name="height">30dp</item>
<item name="background">@color/action_bar_bg</item>
</style>
</resources>
显示的菜单
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" >
<item android:id="@+id/sortByStatus"
android:title="@string/sort_by_status"
app:showAsAction="never" />
<item android:id="@+id/sortByName"
android:title="@string/sort_by_name"
app:showAsAction="never" />
<item android:id="@+id/sortByCompany"
android:title="@string/sort_by_company"
app:showAsAction="never" />
</menu>
这几乎适用于所有地方,除非我尝试显示我的选项菜单。我已经为它添加了选项菜单和处理程序,但是当我单击选项菜单时,默认的顶部图标(来自通知栏)也会显示在我的选项菜单中,我不希望它们显示在那里。它还开始显示索尼手机的默认底部导航按钮。
从 onResume 启用菜单
@Override
public void onResume() {
super.onResume();
AppCompatActivity appCompatActivity = (AppCompatActivity) getActivity();
if (appCompatActivity != null && appCompatActivity.getSupportActionBar() != null)
appCompatActivity.getSupportActionBar().setTitle(getResources().getString(R.string.presense_status));
setHasOptionsMenu(true);
((AppCompatActivity)getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
然后菜单onCreate
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.menu_presense_status, menu);
}
然后是所选项目的处理程序
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
getActivity().getFragmentManager().popBackStackImmediate();
break;
case R.id.sortByStatus:
if (null != mDataSource) {
// update data list
reloadData();
}
break;
case R.id.sortByName:
if (null != mDataSource) {
// update data list
reloadData();
}
break;
case R.id.sortByCompany:
if (null != mDataSource) {
// update data list
reloadData();
}
break;
default:
super.onOptionsItemSelected(item);
}
return true;
}
我真的看不出问题出在哪里,也看不出如何消除它,以免发生这种情况。这发生在由我的主要 Activity 启动的片段内,这意味着我只有一个 Activity 为不同的应用程序内任务生成不同的片段。
任何帮助或想法将不胜感激。
我仍然不太清楚为什么通知栏会受到我所做操作的影响,但是在此视图中强制应用程序全屏显示可以解决问题,所以我想这是一个可以接受的解决方法。
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getActivity().getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
}
好的,所以我遇到了一个小问题,我真的不知道如何解决这个问题。
所以我有一个应用程序,我在其中使用我自己的操作栏样式
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
<item name="windowActionModeOverlay">true</item>
<item name="actionBarStyle">@style/AppTheme.ActionBar</item>
<item name="android:textColorSecondary">@color/action_bar_bg</item>
</style>
<style name="AppTheme.ActionBar" parent="Widget.AppCompat.ActionBar">
<item name="height">30dp</item>
<item name="background">@color/action_bar_bg</item>
</style>
</resources>
显示的菜单
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" >
<item android:id="@+id/sortByStatus"
android:title="@string/sort_by_status"
app:showAsAction="never" />
<item android:id="@+id/sortByName"
android:title="@string/sort_by_name"
app:showAsAction="never" />
<item android:id="@+id/sortByCompany"
android:title="@string/sort_by_company"
app:showAsAction="never" />
</menu>
这几乎适用于所有地方,除非我尝试显示我的选项菜单。我已经为它添加了选项菜单和处理程序,但是当我单击选项菜单时,默认的顶部图标(来自通知栏)也会显示在我的选项菜单中,我不希望它们显示在那里。它还开始显示索尼手机的默认底部导航按钮。
从 onResume 启用菜单
@Override
public void onResume() {
super.onResume();
AppCompatActivity appCompatActivity = (AppCompatActivity) getActivity();
if (appCompatActivity != null && appCompatActivity.getSupportActionBar() != null)
appCompatActivity.getSupportActionBar().setTitle(getResources().getString(R.string.presense_status));
setHasOptionsMenu(true);
((AppCompatActivity)getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
然后菜单onCreate
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.menu_presense_status, menu);
}
然后是所选项目的处理程序
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
getActivity().getFragmentManager().popBackStackImmediate();
break;
case R.id.sortByStatus:
if (null != mDataSource) {
// update data list
reloadData();
}
break;
case R.id.sortByName:
if (null != mDataSource) {
// update data list
reloadData();
}
break;
case R.id.sortByCompany:
if (null != mDataSource) {
// update data list
reloadData();
}
break;
default:
super.onOptionsItemSelected(item);
}
return true;
}
我真的看不出问题出在哪里,也看不出如何消除它,以免发生这种情况。这发生在由我的主要 Activity 启动的片段内,这意味着我只有一个 Activity 为不同的应用程序内任务生成不同的片段。 任何帮助或想法将不胜感激。
我仍然不太清楚为什么通知栏会受到我所做操作的影响,但是在此视图中强制应用程序全屏显示可以解决问题,所以我想这是一个可以接受的解决方法。
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getActivity().getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
}