2014-10-22 32 views
28

ContextAppCompat ToolBar popupTheme không được sử dụng trong ShareAction MenuItem

Sử dụng AppCompat v7 21.0.0/21.0.2/21.0.3

Vấn đề

Các popupTheme của ToolBar không được áp dụng cho ShareAction

Kiểu trên thanh công cụ:

<style name="MyActionBarStyle" parent="Widget.AppCompat.Toolbar"> 
    <item name="android:background">@color/green</item> 
    <item name="popupTheme">@style/ThemeOverlay.AppCompat.Light</item> 
    <item name="theme">@style/ThemeOverlay.AppCompat.Dark.ActionBar</item> 
</style> 

Các tràn menu item được sử dụng đúng cách popupTheme

Overflow Item

Các ShareAction mặt khác không nhận được popupTheme. Sau một số thử nghiệm, tôi nhận thấy nó đã nhận được ứng dụng: chủ đề của thanh công cụ do đó bị tối.

<item name="android:colorBackground">@color/white</item> 

ShareAction Menu Item

Để có được chữ đen trên ShareAction tôi đã cố gắng thiết lập nhiều thuộc tính và bằng cách thiết lập "android: textColorPrimary" (trên chủ đề ToolBar) tôi nhận được những gì tôi muốn NHƯNG sau đó biểu tượng của tôi trên thanh công cụ cũng có màu này là lạ ...

các xml đơn như sau:

<?xml version="1.0" encoding="utf-8"?> 

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:cycle="http://schemas.android.com/apk/res-auto"> 

    <item 
     android:id="@+id/ic_share" 
     android:icon="@drawable/abc_ic_menu_share_holo_dark" 
     android:title="@string/media_share" 
     cycle:showAsAction="ifRoom" 
     cycle:actionProviderClass="android.support.v7.widget.ShareActionProvider" /> 
    <item 
     android:icon="@drawable/abc_ic_menu_share_holo_dark" 
     android:showAsAction="ifRoom" 
     android:title="br"> 
     <menu> 
      <item 
       android:id="@+id/menuSortNewest" 
       android:title="Sort by newest" /> 
      <item 
       android:id="@+id/menuSortRating" 
       android:title="Sort by rating" /> 
     </menu> 
    </item> 

</menu> 

tôi mong chờ cả ShareActi trên & tràn để có popupTheme nhưng nó không phải là trường hợp

Cách giải quyết

Tôi sẽ sửa bài này một lần tôi nhận được một workaround

Ref: https://code.google.com/p/android/issues/detail?id=87285&thanks=87285&ts=1419254842

Trả lời

27

Vì vậy, đây là những gì phù hợp với tôi. Dưới đây là xml Toolbar của tôi:

<?xml version="1.0" encoding="utf-8"?> 
<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_main" 
    android:layout_height="wrap_content" 
    android:layout_width="fill_parent" 
    app:theme="@style/Toolbar" 
    app:popupTheme="@style/Toolbar_Popup" 
    android:minHeight="?attr/actionBarSize" 
    android:background="?attr/colorPrimary" /> 

Chú ý rằng tôi đặt cả chủ đề và popupTheme, và tôi cũng ghi đè lên nền được colorPrimary. Dưới đây là mô tả chủ đề ứng dụng chính với các chủ đề cho Toolbar:

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> 
    <item name="android:actionMenuTextColor">@color/white</item> 

    <!-- Support library compatibility --> 
    <item name="actionMenuTextColor">@color/white</item> 

    <item name="actionBarSize">@dimen/actionbar_height</item> 

    <item name="colorPrimary">@color/dark_blue</item> 
    <item name="colorPrimaryDark">@color/dark_blue</item> 
    <item name="android:textColorPrimary">#607d8b</item> 

</style> 

<style name="Toolbar" parent="Base.ThemeOverlay.AppCompat.ActionBar"> 
    <item name="android:textColorPrimary">#fff</item> 
    <item name="android:background">@color/dark_blue</item> 
</style> 

<style name="Toolbar_Popup" parent="Base.ThemeOverlay.AppCompat.ActionBar"> 
    <item name="android:textColorPrimary">#fff</item> 
    <item name="android:background">@color/dark_blue</item> 
</style> 

Vì vậy, kết quả là, nền Chia sẻ hành động được thiết lập với giá trị của nền tảng về chủ đề Thanh công cụ chính. Và chính nền của Thanh công cụ bị tràn ngập.

+1

Rất cám ơn đó là một giải pháp tốt. đơn giản :) – Benoit

+1

Something hữu ích để thêm sẽ là true, đối với tôi chọn chỉ hiển thị như một đường viền xung quanh từ trong danh sách khi ép khác –

+1

wont work này trong v7: 23,1 .1 – Max

0

trang này có thể giúp để giải quyết vấn đề của bạn: http://www.murrayc.com/permalink/2014/10/28/android-changing-the-toolbars-text-color-and-overflow-icon-color/

Một khác biệt mà tôi nhận thấy trong XML của bạn là bạn đã từng sử dụng thuộc tính android: hiển thị AsAction = "ifRoom" và một lần chu kỳ: showAsAction = "ifRoom".

+1

Có android/cycle là lỗi dán bản sao. và trang web không nói về vấn đề cụ thể này, thực ra đó là một lỗi trong thư viện AppCompat sẽ được sửa lại sớm – Benoit

0

Tôi đã gãi đầu cho các độ tuổi cố gắng giải quyết vấn đề này. Tôi đã tìm ra giải pháp cho vấn đề của mình.Hopefuully này sẽ giúp những người khác cũng:

Trong định nghĩa trên thanh công cụ của tôi, tôi đã thiết lập một chủ đề tùy chỉnh như sau:

<android.support.v7.widget.Toolbar  
    ... 
    app:theme="@style/ActionBarThemeOverlay" 
    ... /> 

Trong styles.xml của tôi, chủ đề của tôi đã được định nghĩa là:

<style name="ActionBarThemeOverlay" parent="ThemeOverlay.AppCompat.Light"> 
    <item name="android:textColorPrimary">#fff</item> 
    <item name="colorControlNormal">#fff</item> 
    <item name="colorControlHighlight">#3fff</item> 
</style> 

Tôi muốn các biểu tượng hành động màu trắng trên thanh công cụ của mình, vì vậy tôi đã đặt các giá trị này thành màu trắng. Thật không may, nó cũng làm cho văn bản trình đơn ShareActionProvider trắng của tôi (trên nền trắng).

Các giải pháp đối với tôi là để loại bỏ các thiết lập phong cách cho textColorPrimary. Biểu tượng thanh công cụ của tôi vẫn còn màu trắng nhưng bây giờ tôi đã có văn bản tối ưu mong muốn trong menu nhà cung cấp chia sẻ cửa sổ bật lên.

<style name="ActionBarThemeOverlay" parent="ThemeOverlay.AppCompat.Light"> 
    <item name="colorControlNormal">#fff</item> 
    <item name="colorControlHighlight">#3fff</item> 
</style> 
Các vấn đề liên quan