2014-10-18 31 views
27

Vì vậy, bây giờ Android 5.0 đã được phát hành, tôi đã tự hỏi làm thế nào để tạo kiểu cho các biểu tượng hành động động.Cách tạo kiểu DrawerArrowToggle từ thư viện appcompat v7 21

Thư viện này here thực hiện và phong cách nó phù hợp với tôi nhưng vì thư viện appcompat v7 có nó như thế nào nó có thể được tạo kiểu?

Tôi đã thực hiện việc này bằng cách sử dụng DrawerToggle v7. Tuy nhiên tôi không thể tạo kiểu cho nó. Xin vui lòng giúp

tôi thấy phong cách cho nó trong v7 styles_base.xml

<style name="Base.Widget.AppCompat.DrawerArrowToggle" parent=""> 
    <item name="color">?android:attr/textColorSecondary</item> 
    <item name="thickness">2dp</item> 
    <item name="barSize">18dp</item> 
    <item name="gapBetweenBars">3dp</item> 
    <item name="topBottomBarArrowSize">11.31dp</item> 
    <item name="middleBarArrowSize">16dp</item> 
    <item name="drawableSize">24dp</item> 
    <item name="spinBars">true</item> 
</style> 

tôi thêm này để phong cách của tôi và đã không làm việc. Cũng được thêm vào attr.xml của tôi

<declare-styleable name="DrawerArrowToggle"> 
    <!-- The drawing color for the bars --> 
    <attr name="color" format="color"/> 
    <!-- Whether bars should rotate or not during transition --> 
    <attr name="spinBars" format="boolean"/> 
    <!-- The total size of the drawable --> 
    <attr name="drawableSize" format="dimension"/> 
    <!-- The max gap between the bars when they are parallel to each other --> 
    <attr name="gapBetweenBars" format="dimension"/> 
    <!-- The size of the top and bottom bars when they merge to the middle bar to form an arrow --> 
    <attr name="topBottomBarArrowSize" format="dimension"/> 
    <!-- The size of the middle bar when top and bottom bars merge into middle bar to form an arrow --> 
    <attr name="middleBarArrowSize" format="dimension"/> 
    <!-- The size of the bars when they are parallel to each other --> 
    <attr name="barSize" format="dimension"/> 
    <!-- The thickness (stroke size) for the bar paint --> 
    <attr name="thickness" format="dimension"/> 
</declare-styleable> 

Nhưng treo và nói lỗi loại màu khi làm như vậy. Tôi đang thiếu gì?

Trả lời

92

Các công trình sau đây cho tôi:

<style name="MyTheme" parent="Theme.AppCompat"> 
    <item name="drawerArrowStyle">@style/MyDrawerArrowToggle</item> 
</style> 

<style name="MyDrawerArrowToggle" parent="Widget.AppCompat.DrawerArrowToggle"> 
    <item name="color">@color/your_color</item> 
</style> 
+1

Chủ đề cơ sở của tôi không phải là appcompat. Tôi không hỗ trợ api bên dưới 15. Thay đổi chủ đề appcompat cho cơ sở của tôi sẽ thay đổi mọi thứ. – Bignadad

+1

Được rồi tôi đã chuyển đổi mọi thứ sang appcompat, thay đổi fragmentactivity thành actionbaractivity, getactionbar thành getsupportactionbar và đã tạo thanh công cụ. tôi sau đó sử dụng những gì bạn đặt ở trên và vẫn sẽ không hoạt động. thậm chí sẽ không thay đổi màu hoặc tạo hiệu ứng động. tôi có thể làm gì sai? – Bignadad

+0

Ngoài ra tôi đã xem xét công việc của bạn (tuyệt vời) ở đây https://chris.banes.me/2014/10/17/appcompat-v21/ nhưng vẫn không có may mắn. – Bignadad

-1

tên phong cách của bạn không có cha mẹ Dưới đây là làm việc với android 5 và Vật liệu Theme, mà không cần phải thay thế actionbar với appCompat Dưới đây là phong cách của tôi, tôi chỉ cần thiết để thay đổi màu trắng, vì tôi đã có một thanh màu

 <style name="myTheme.DrawerArrowToggle" parent="Base.Widget.AppCompat.DrawerArrowToggle"> 
    <item name="color">@color/white</item> 
</style> 

Và đây là chủ đề của tôi

<style name="Theme_AppTheme.Light" parent="@android:style/Theme.Material.Light"> 

    <!-- Drawer\arrow in white --> 
    <item name="drawerArrowStyle">@style/myTheme.DrawerArrowToggle</item> 

ps. chỉ có một vấn đề, trên adroid 4.4 và thanh tác vụ bình thường không hiển thị tốt. Và không may là ngăn kéo nreToggle từ v7 không kế thừa từ v4

-1

Không chắc chắn lỗi chính xác là gì, nếu bạn nhận được màu đã được xác định, hãy đi đến attrs.xml tìm kiếm tên attr = "color" và đổi tên hoặc thử nghiệm bình luận nó, bạn có thể cần phải thay đổi attr tùy chỉnh của bạn để tên khác, không chắc chắn đây là một vấn đề lib hỗ trợ, điều này làm việc cho tôi

23

Trong trường hợp của tôi, tôi muốn thay đổi màu sắc của mũi tên ngăn kéo và biểu tượng bánh hamburger. Cài đặt kiểu mũi tên ngăn kéo chỉ thay đổi màu biểu tượng bánh hamburger.

Vì vậy, tôi đã mở Widget.AppCompat.DrawerArrowToggle kiểu trong values.xml của appcompat-v7.

<style name="Widget.AppCompat.DrawerArrowToggle" parent="Base.Widget.AppCompat.DrawerArrowToggle"> 
    <item name="color">?attr/colorControlNormal</item> 
</style> 

Vì vậy, tôi tạo chủ đề đặc biệt:

<style name="Toolbar_Theme"> 
    <item name="colorControlNormal">@android:color/black</item> 
</style> 

và áp dụng nó vào thanh công cụ của tôi như sau:

<android.support.v7.widget.Toolbar 
    android:id="@+id/toolbar" 
    app:theme="@style/Toolbar_Theme" /> 

Note, mà tôi đang sử dụng themeattribute thay vì xác định controlColorNormal trong chủ đề ứng dụng của tôi. Bằng cách này, màu sắc sẽ chỉ phụ thuộc vào các mục trên thanh công cụ, nếu tôi đặt nó trong chủ đề ứng dụng, thì nó cũng sẽ ảnh hưởng đến các thanh cuộn màu, v.v.

Thiết lập thay đổi cả hai màu của bánh hamburger và ngăn kéo.

+0

Đây chính xác là những gì tôi đang cố gắng làm tốt nhưng vì một lý do nào đó, nó không thay đổi một điều gì đối với tôi. – Barodapride

3

Đối với bất cứ ai mà kết thúc ở đây (như tôi đã làm) tìm kiếm một cách để thay thế các biểu tượng chỉ ngăn kéo với drawable của riêng bạn (không động) bằng cách sử dụng ActionBarDrawerToggle v7, bạn có thể làm như sau:

//After instantiating your ActionBarDrawerToggle 
mDrawerToggle.setDrawerIndicatorEnabled(false); 
Drawable drawable = ResourcesCompat.getDrawable(getResources(), R.drawable.your_custom_icon, getActivity().getTheme()); 
mDrawerToggle.setHomeAsUpIndicator(drawable); 
mDrawerToggle.setToolbarNavigationClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     if (mDrawerLayout.isDrawerVisible(GravityCompat.START)) { 
      mDrawerLayout.closeDrawer(GravityCompat.START); 
     } else { 
      mDrawerLayout.openDrawer(GravityCompat.START); 
     } 
    } 
}); 
0

Đối với trường hợp của tôi theming của actionbar là có liên quan đến chuyển đổi giữa màu trắng và một biểu tượng bánh hamburger tối:

<item name="actionBarWidgetTheme">@style/Theme.AppCompat</item> 

vs

<item name="actionBarWidgetTheme">@style/Theme.AppCompat.Light</item> 
0

Tôi muốn để làm cho bánh hamburguer/mũi tên màu trắng, nhưng không có công cụ nào trong số tất cả "kiểu" này hoạt động đối với tôi. Tôi đã gỡ bỏ tất cả và thêm dòng này chỉ giải quyết nó, như một thuộc tính của "các android.support.v7.widget.Toolbar" yếu tố trong cách bố trí:

android: theme = "@ style/ThemeOverlay.AppCompat.Dark.ActionBar

Các vấn đề liên quan