Android: стиль ActionMode на AppCompat-v7 с панелью инструментов

Я создал ListView с возможностью выбора элементов, но ActionMode не отображается правильно. (Существует и кнопка «сравнить» справа с белым цветом)

Введите описание изображения здесь

Я попытался создать actionMode с помощью следующего кода, но ничего не меняется. Любые идеи, почему это может произойти? Я узнал, что если я установил цвет фона прямо на виджет панели инструментов, а не на DarkTheme.ActionBar, цвет вокруг текста на actionMode исчез, но цвет текста белый, а также мне нужно иметь цвет ActionBar Определяемый на тему вместо виджета.

toolbar.xml

<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/action_bar" android:layout_height="wrap_content" android:layout_width="match_parent" android:minHeight="?attr/actionBarSize" app:theme="@style/DarkTheme.ActionBar" app:popupTheme="@style/DarkTheme.Popup"/> 

mytheme.xml

 <resources> <style name="DarkTheme.ActionBar" parent="Theme.AppCompat.Light.DarkActionBar"> <item name="android:textColorPrimary">@color/abc_primary_text_material_dark</item> <item name="actionMenuTextColor">@color/abc_primary_text_material_dark</item> <item name="android:textColorSecondary">#ffff8800</item> <item name="android:textAllCaps">false</item> <item name="android:background">#303030</item> </style> <style name="DarkTheme.Popup" parent="ThemeOverlay.AppCompat.Dark"> <item name="android:textColor">#ffffff</item> </style> <style name="DarkTheme" parent="Theme.AppCompat.Light.NoActionBar"> <item name="android:textColor">#101010</item> <item name="android:textColorLink">#ff0099cc</item> <item name="windowActionModeOverlay">true</item> <item name="android:colorPrimaryDark">#000000</item> <item name="android:navigationBarColor">#000000</item> <item name="android:textAllCaps">false</item> <item name="android:actionModeStyle">@style/DarkTheme.ActionMode</item> </style> <style name="DarkTheme.ActionMode" parent="Widget.AppCompat.ActionMode"> <item name="android:actionModeBackground">@android:color/black</item> <item name="android:background">#000000</item> <item name="android:backgroundSplit">#000000</item> </style> </resources> 

Я не очень понимаю ваши вещи, это выглядит странно. Тема предназначена для деятельности или приложения в манифесте. Для виджета вы должны использовать стиль. Если вы посмотрите на свой вопрос, я думаю, вы просто не знаете, как использовать тему и темы. Поэтому ваша тема должна выглядеть так:

  <resources> <style name="AppBlankTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <!-- Main theme colors --> <!-- your app branding color for the app bar --> <item name="colorPrimary">@color/primary</item> <!-- darker variant for the status bar and contextual app bars --> <item name="colorPrimaryDark">@color/primary_dark</item> <!-- theme UI controls like checkboxes and text fields --> <item name="colorAccent">@color/accent</item> </style> <!--Both themes below are those accepted to make the ToolBar works--> <!-- Base application theme. --> <style name="AppTheme" parent="AppBlankTheme"> <!-- Customize your theme here. --> <!-- Base application theme. --> <item name="windowNoTitle">true</item> <item name="windowActionBar">false</item> </style> <style name="MyAppTheme" parent="Theme.AppCompat.NoActionBar"/> <!--The Theme for the Actvity that have actionMode--> <style name="ActionModeAppTheme" parent="AppTheme"> <item name="windowActionModeOverlay">true</item> <item name="actionModeBackground">@color/primary_dark</item> <item name="actionBarPopupTheme">@style/ThemeOverlay.AppCompat.Light</item> </style> </resources> 

Затем ваш манифест выглядит примерно так:

  <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.android2ee.formation.lollipop.toolbar" > <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".MainActivity" android:label="@string/app_name" android:theme="@style/AppTheme" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".sample.ActivityWithItems" android:label="@string/title_activity_activity_with_items" android:parentActivityName=".MainActivity" > <meta-data android:name="android.support.PARENT_ACTIVITY" android:value="com.android2ee.formation.lollipop.toolbar.MainActivity" /> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="com.android2ee.formation.lollipop.toolbar.EXAMPLE" /> </intent-filter> </activity> <activity android:name=".sample.ActionModeActivity" android:label="@string/title_activity_actionmode" android:theme="@style/ActionModeAppTheme" android:parentActivityName=".MainActivity" > <meta-data android:name="android.support.PARENT_ACTIVITY" android:value="com.android2ee.formation.lollipop.toolbar.MainActivity" /> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="com.android2ee.formation.lollipop.toolbar.EXAMPLE" /> </intent-filter> </activity> </application> </manifest> 

И ваша деятельность выглядит примерно так:

 public class ActionModeActivity extends AppCompatActivity { ActionMode mMode; /** * The action Bar */ private ActionBar actionBar; private Toolbar toolbar; Callback actionModeCallBack; private boolean postICS,postLollipop; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //You could also hide the action Bar // getSupportActionBar().hide(); setContentView(R.layout.activity_action_mode); toolbar = (Toolbar) findViewById(R.id.toolbar); toolbar.setNavigationIcon(R.drawable.ic_action_custom_up); postICS =getResources().getBoolean(R.bool.postICS); postLollipop =getResources().getBoolean(R.bool.postLollipop); if(postLollipop){ toolbar.setElevation(15); } setSupportActionBar(toolbar); actionBar=getSupportActionBar(); actionBar.setDisplayUseLogoEnabled(false); actionBar.setDisplayHomeAsUpEnabled(true); // Show the Up button in the action bar. findViewById(R.id.start_actionmode).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { enableActionMode(); } }); findViewById(R.id.stop_actionmode).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (mMode != null) { //To quit the ActionMode mMode.finish(); } } }); actionModeCallBack=new Callback() { @Override public boolean onPrepareActionMode(ActionMode mode, Menu menu) { return false; } @Override public void onDestroyActionMode(ActionMode mode) { } @Override public boolean onCreateActionMode(ActionMode mode, Menu menu) { getMenuInflater().inflate(R.menu.action_mode, menu); return true; } @Override public boolean onActionItemClicked(ActionMode mode, MenuItem item) { Toast.makeText(ActionModeActivity.this, "Got click: " + item, Toast.LENGTH_SHORT).show(); mode.finish(); return true; } }; } private void enableActionMode() { mMode = startSupportActionMode(actionModeCallBack); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_activity_with_items, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: // This ID represents the Home or Up button. In the case of this // activity, the Up button is shown. Use NavUtils to allow users // to navigate up one level in the application structure. For // more details, see the Navigation pattern on Android Design: // // http://developer.android.com/design/patterns/navigation.html#up-vs-back // NavUtils.navigateUpFromSameTask(this); return true; } return super.onOptionsItemSelected(item); } } 
Intereting Posts