actionMode-theme中修改actionmode中more下拉框的背景颜色

  今天在做图库修改是,需要修改图库的actionbar某个按钮弹出来的下拉框的背景颜色,在网上找了个方法尝试下,没有打到自己的要求,不过阴差阳错的却修改了more下拉框的背景,再次记录下,也许以后能用的到。

  代码

   <style name="Theme.FunuiGallery" parent="android:Theme.Funui">
        <item name="listPreferredItemHeightSmall">48dp</item>
        <item name="android:itemTextAppearance">@style/Gallery.IconMenu.Item</item>
        <item name="switchStyle">@android:style/Widget.CompoundButton</item>
        <item name="android:actionBarStyle">@style/PhotoBarStyle</item>
        <item name="android:actionModeStyle">@style/ActionModeStyle</item>
        <item name="android:actionOverflowButtonStyle">@style/ContactsActionBarOverflow</item>
        <item name="android:actionModeSplitBackground">@android:drawable/ic_menu_close_clear_cancel</item>
     <item name="*android:activityChooserViewStyle">@style/Gallery.ChooserViewStyle</item>
        <item name="*android:actionModeShareDrawable">@drawable/ic_menu_share_holo_dark</item>

</style> <!-- 修改字体颜色--> <style name="Gallery.IconMenu.Item" parent="@android:style/TextAppearance.Small"> <item name="android:textColor">#ffffff</item> </style> <!--修改more按钮图标--> <style name="ContactsActionBarOverflow" parent="@android:style/Widget.Holo.ActionButton.Overflow"> <item name="android:src">@drawable/action_mode_more</item> </style>
    <style name="Gallery.ChooserViewStyle" parent="@*android:style/Widget.Funui.ActivityChooserView">
         <item name="android:background">@null</item>
    </style>

 属性介绍:

1.<item name="android:itemTextAppearance">@style/Gallery.IconMenu.Item</item>

这个主要是用来设置actionmode里面的more按钮的下拉框字体颜色,不过,它里面好像没有设置背景颜色的属性,反而背景会随着字体的颜色而改变

2.<item name="*android:activityChooserViewStyle">@style/Gallery.ChooserViewStyle</item>

这个是用来修改图库上面的那个分享背景的

3.<item name="*android:actionModeShareDrawable">@drawable/ic_menu_share_holo_dark</item>

这个是用来修改分享的图标的

注意

当我们要引用一个非公开的theme或者sytle属性的时候,这时候,我们一定要在前面加上一个*号,无论这个属性是在使用,还是作为某一个theme的父类,就如上面的

<style name="Gallery.ChooserViewStyle" parent="@*android:style/Widget.Funui.ActivityChooserView">

<item name="*android:actionModeShareDrawable">@drawable/ic_menu_share_holo_dark</item>

如果我们实在代码中进行引用,是没办法直接引用非公开的属性的,这时候我们要么是把那个属性公开,要么是自己定义一个属性,然后利用*号引用父类,这时候自己的主题就是公开的了;

如何看一个属性是不是公开的?我们只需要在framework下搜索这个属性,如果能看到public文件中有,就说名这个属性是公开的,就像<public type="attr" name="textAppearanceInverse" id="0x01010035" />。至于怎么使一个属性公开化,还没有去尝试,以后用到再说吧。

 

今天让一个同事帮忙解决一个问题,主要就是替换一个图片。看他的操作,给我的感触很深,就是他解决问题的时候,思路非常的清晰,虽然他也不知道能不能解决,但他总是能沿着一个方向,有条不紊的进行,而不会向我一样都是在一个地方来回绕。

  1.查找问题关键字

  2.到framework下查找类的具体实现,看其中有没有可利用的属性来实现自己的要求

  3.反过来查询,根据图片来查看到底那个地方用到了这个图片

 

posted @ 2015-01-12 10:22  小白屋  阅读(959)  评论(0编辑  收藏  举报