6

Ho creato una ListView con elementi selezionabili ma la modalità Action non viene visualizzata correttamente. (C'è e un pulsante di menu "confrontare" a destra con il colore bianco)Android: Style ActionMode su AppCompat-v7 con barra degli strumenti

enter image description here

ho provato per lo stile della actionMode con il seguente codice, ma non cambia nulla. Qualche idea per quale motivo potrebbe accadere? Ho scoperto che se impostassi il colore di sfondo direttamente sul widget di Toolbar invece di DarkTheme.ActionBar il colore intorno al testo su actionMode è scomparso, ma il colore del testo è bianco e devo anche avere il colore di ActionBar definito sul tema al posto del widget.

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> 

risposta

-2

io non capisco davvero la tua roba, sembra strano. Il tema è per attività o applicazione nel manifest. Per widget devi usare lo stile. Quando guardi la tua domanda, penso, semplicemente non sai come usare il tema e quali sono i temi. Così il vostro tema dovrebbe apparire come una roba del genere:

<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> 

Allora il vostro manifesto si assomiglia a qualcosa di simile:

<?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> 

e la vostra attività si presenta come qualcosa di simile:

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

} 
Problemi correlati