6

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

enter image description here

Я пытался стилизовать 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> 

ответ

-2

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

<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); 
    } 

}