При использовании ActionMode строка состояния становится черной на Lollipop
У меня есть строка состояния со следующим в теме:
<!-- Base Theme for all "Material"-esque styles. We use NoActionBar
so we can use the Toolbar at runtime.
-->
<style name="Material" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
<item name="android:windowTranslucentStatus">true</item>
...
</style>
у меня тоже естьDrawerLayout
для большинства моих действий, который устанавливает цвет строки состояния по своему вкусу, используя:
mDrawerLayout.setStatusBarBackgroundColor(getResources().getColor(R.color.myapp_green));
Я используюToolbar
, а не по умолчаниюActionBar
таким образом, он существует в моем макете (то есть навигационный ящик рисует поверх него).
Все работает нормально, за исключением того, что в одном из моих занятий у меня есть режим множественного выбора сActionMode
, Когда этоActionMode
активируется (длительное нажатие), накладываетToolbar
с помощью:
<item name="android:windowActionModeOverlay">true</item>
<item name="windowActionModeOverlay">true</item>
<item name="actionModeStyle">@style/Material.Widget.ActionMode</item>
Material.Widget.ActionMode
Стиль это:
<style name="Material.Widget.ActionMode" parent="@style/Widget.AppCompat.ActionMode">
<item name="android:background">@color/myapp_green</item>
<item name="background">@color/myapp_green</item>
</style>
Теперь проблема в том, что всякий раз, когда это происходит, строка состояния поворачивается отmyapp_green
цвет к черному. Это почти как если бы прозрачность строки состояния отключена (я использую Android 5.0). Мне интересно, как я мог бы добиться того, чтобы такое поведение не происходило, и чтобы цвет / прозрачность строки состояния были как есть.
Я пытался добавить<item name="android:windowTranslucentStatus">true</item>
к стилям режима действия, а также добавление<item name="android:statusBarColor">@color/myapp_green</item>
в стиле дляActionMode
Оба безуспешно.
Обновить:
Интересно, это как-то связано с тем, что я устанавливаю фон строки состояния? Все мои классы Activity являются производными от NavigationDrawerActivity.java:
/**
* An {@link Activity} that supports a Navigation Drawer, which is a pull-out panel for navigation
* menus. This drawer is pulled out from the left side of the screen (right side on RTL devices).
*/
public class NavigationDrawerActivity extends ActionBarActivity
implements AdapterView.OnItemClickListener {
private static final String LOGTAG = NavigationDrawerActivity.class.getSimpleName();
private DrawerLayout mDrawerLayout;
private ListView mDrawerList;
private LayoutInflater mInflater;
private NavigationDrawerItemAdapter mAdapter;
private ActionBarDrawerToggle mDrawerToggle;
private NavigationDrawerItem[] mNavigationDrawerItems;
private Toolbar mAppBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// We have to call super.setContentView() here because BaseActivity redefines setContentView(),
// and we don't want to use that.
super.setContentView(R.layout.navigation_drawer);
mInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
setupNavigationDrawer();
}
@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
// Sync the toggle state after onRestoreInstanceState has occurred.
mDrawerToggle.syncState();
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
mDrawerToggle.onConfigurationChanged(newConfig);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
switch,(id) {
case android.R.id.home:
return mDrawerToggle.onOptionsItemSelected(item);
}
return super.onOptionsItemSelected(item);
}
/**
* Toggles the state of the navigation drawer (i.e. closes it if it's open, and opens it if
* it's closed).
*/
public void toggleNavigationDrawer() {
if (mDrawerLayout.isDrawerOpen(GravityCompat.START)) {
closeNavigationDrawer();
} else {
openNavigationDrawer();
}
}
/**
* Opens the navigation drawer.
*/
public void openNavigationDrawer() {
mDrawerLayout.openDrawer(GravityCompat.START);
}
/**
* Closes the navigation drawer.
*/
public void closeNavigationDrawer() {
mDrawerLayout.closeDrawer(GravityCompat.START);
}
/**
* Initializes items specific to the navigation drawer.
*/
private void setupNavigationDrawer() {
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
mDrawerLayout.setStatusBarBackgroundColor(getResources().getColor(R.color.wiw_green));
mAppBar = (Toolbar) findViewById(R.id.app_bar);
setSupportActionBar(mAppBar);
ActionBar actionBar = getSupportActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setHomeButtonEnabled(true);
actionBar.setDisplayShowHomeEnabled(false);
mDrawerToggle = new ActionBarDrawerToggle(
this, /* Our context (Activity that hosts this drawer) */
mDrawerLayout, /* The DrawerLayout where the nav drawer will be drawn */
R.string.drawer_open, /* Description of "open drawer", for accessibility */
R.string.drawer_close /* Description of "close drawer", for accessibility */
) {
/**
* Called when a drawer has settled in a completely closed state.
*/
public void onDrawerClosed(View view) {
super.onDrawerClosed(view);
supportInvalidateOptionsMenu();
}
/**
* Called when a drawer has settled in a completely open state.
*/
public void onDrawerOpened(View drawerView) {
super.onDrawerOpened(drawerView);
supportInvalidateOptionsMenu();
}
};
mDrawerList = (ListView) mDrawerLayout.findViewById(R.id.drawer_list);
mNavigationDrawerItems = buildNavDrawerItemsList();
setupAdapter(mNavigationDrawerItems);
setupNavigationDrawerHeader();
mDrawerLayout.setDrawerListener(mDrawerToggle);
mDrawerList.setOnItemClickListener(this);
}
@Override
public void onItemClick(AdapterView<?> parent, View aView, int aPosition, long aId) {
// Code not relevant
}
/**
* Set the inner content view of this {@link NavigationDrawerActivity} to have a given layout.
*
* @param aLayoutId The id of the layout to load into the inner content view of this activity.
*/
public void setDrawerContent(int aLayoutId) {
LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
ViewGroup root = (ViewGroup)findViewById(R.id.drawer_content);
inflater.inflate(aLayoutId, root);
}
}
Я на самом деле должен бежатьDrawerLayout.setStatusBarBackgroundColor()
чтобы это имело эффект. Просто меняетсяcolorPrimaryDark
вvalues-v21/styles.xml
не влияет на строку состояния. Я чувствую, что это может быть корнем проблемы ... Эти классы преобразуются из нематериальной темы в новую материальную тему, поэтому мне интересно, пропустил ли я что-то, когда сделал преобразование вcolorPrimaryDark
быть признанным правильно.