6

Zrobiłem ListView z wybieralnymi przedmiotami, ale ActionMode nie wyświetla się poprawnie. (Nie ma i „porównanie” przycisk menu po prawej z białym kolorem)Android: Styl ActionMode na AppCompat-v7 z paskiem narzędzi

enter image description here

Próbowałem styl dla actionMode z następującego kodu, ale nic nie zmienia. Jakieś pomysły, dlaczego tak się dzieje? Dowiedziałem się, że jeśli ustawiam kolor tła bezpośrednio na widżecie paska narzędzi Toolbar zamiast na DarkTheme.ActionBar, kolor wokół tekstu na actionMode zniknie, ale nadal kolor tekstu jest biały, a także muszę mieć kolor ActionBar zdefiniowane na temat zamiast widżetu.

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> 

Odpowiedz

-2

nie naprawdę zrozumieć swoje rzeczy, to wygląda dziwnie. Motyw dotyczy aktywności lub aplikacji w manifeście. Do widgetu powinieneś użyć stylu. Gdy patrzę na twoje pytanie, myślę, że po prostu nie wiesz, jak używać motywu i jakie są motywy. Więc motyw powinien wyglądać jak rzeczy tak:

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

wówczas oczywisty ty wygląda coś takiego:

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

A swoją aktywność wygląda coś takiego:

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

} 
Powiązane problemy