首先就是去framework下去找与之相关的theme属性

最开始的时候,直接找的是<item name="datePickerStyle">@style/Widget.Funui.DatePicker</item> ,但是,往父类里面找的话,并没有找到有效属性,仅仅就有一个布局

<item name="android:internalLayout">@android:layout/date_picker_holo</item>属性,然后就从这里着手,看到了一个布局

  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. android:layout_width="wrap_content"
  3. android:layout_height="wrap_content"
  4. android:layout_gravity="center_horizontal"
  5. android:orientation="horizontal"
  6. android:gravity="center">
  7.  
  8. <LinearLayout android:id="@+id/pickers"
  9. android:layout_width="wrap_content"
  10. android:layout_height="wrap_content"
  11. android:layout_weight="1"
  12. android:orientation="horizontal"
  13. android:gravity="center">
  14.  
  15. <!-- Month -->
  16. <NumberPicker
  17. android:id="@+id/month"
  18. android:layout_width="wrap_content"
  19. android:layout_height="wrap_content"
  20. android:layout_marginTop="16dip"
  21. android:layout_marginBottom="16dip"
  22. android:layout_marginStart="8dip"
  23. android:layout_marginEnd="8dip"
  24. android:focusable="true"
  25. android:focusableInTouchMode="true"
  26. />
  27.  
  28. <!-- Day -->
  29. <NumberPicker
  30. android:id="@+id/day"
  31. android:layout_width="wrap_content"
  32. android:layout_height="wrap_content"
  33. android:layout_marginTop="16dip"
  34. android:layout_marginBottom="16dip"
  35. android:layout_marginStart="8dip"
  36. android:layout_marginEnd="8dip"
  37. android:focusable="true"
  38. android:focusableInTouchMode="true"
  39. />
  40. <!-- Year -->
  41. <NumberPicker
  42. android:id="@+id/year"
  43. android:layout_width="wrap_content"
  44. android:layout_height="wrap_content"
  45. android:layout_marginTop="16dip"
  46. android:layout_marginBottom="16dip"
  47. android:layout_marginStart="8dip"
  48. android:layout_marginEnd="16dip"
  49. android:focusable="true"
  50. android:focusableInTouchMode="true"
  51. />
  52.  
  53. </LinearLayout>
  54.  
  55. <!-- calendar view -->
  56. <CalendarView
  57. android:id="@+id/calendar_view"
  58. android:layout_width="245dip"
  59. android:layout_height="280dip"
  60. android:layout_marginStart="16dip"
  61. android:layout_marginEnd="16dip"
  62. android:layout_weight="1"
  63. android:focusable="true"
  64. android:focusableInTouchMode="true"
  65. />
  66.  
  67. </LinearLayout>

发现其中并没有关于下划线的控件,后来感觉这个应该跟NumberPicker 有关,进入后,发现这个控件中有对下划线的绘制,然后就再次到theme下寻找这个控件的属性,找到了一条

<item name="numberPickerStyle">@style/Widget.Funui.NumberPicker</item>,沿着这个属性往下找,找到了父类,如下

  1. <style name="Widget.Holo.NumberPicker" parent="Widget.NumberPicker">
  2. <item name="android:internalLayout">@android:layout/number_picker_with_selector_wheel</item>
  3. <item name="android:solidColor">@android:color/transparent</item>        
  4. <!--更改下划线的属性-->
    <item name="android:selectionDivider">@android:drawable/numberpicker_selection_divider</item>
  5. <item name="android:selectionDividerHeight">2dip</item>
  6. <item name="android:selectionDividersDistance">48dip</item>
  7. <item name="android:internalMinWidth">64dip</item>
  8. <item name="android:internalMaxHeight">180dip</item>
  9. <item name="virtualButtonPressedDrawable">?android:attr/selectableItemBackground</item>
  10. </style>

然后我们在framework中替换这条属性以后,确实发生了作用,但是,当我们尝试在应用中进行修改的时候,这时候又遇到了一个问题,就是,如果我们按照如下的方法进行修改

  1. <resources>
  2. <style name="Settings.Theme" parent="Custom_Settings_Theme">
  3. <item name="apnPreferenceStyle">@style/ApnPreference</item>
  4. <item name="android:actionBarTabTextStyle">@style/customActionBarTabTextStyle</item>
  5. <item name="android:actionBarStyle">@style/SettingsBarStyle</item>
  6. <item name="android:actionBarTabStyle">@style/SettingsActionBarTabView</item>
  7. <item name="*android:actionMenuLandTextColor">#ffffff</item>
  8. <item name="android:actionMenuTextColor">@color/action_menu_text_color</item>
  9. <item name="*android:homeAsUpIndicator">@drawable/ic_ab_back_holo_dark_am</item>
  10. <item name="wifi_signal">@drawable/wifi_signal_light</item>
  11. <item name="android:windowFullscreen">true</item>
  12. <item name="android:switchStyle">@style/mySwitchStyle</item>
  13. <item name="android:listChoiceIndicatorSingle">@drawable/btn_radio_funui</item>
  14. <item name="android:listChoiceIndicatorMultiple">@drawable/btn_check_funui</item>
  15. <item name="android:alertDialogTheme">@style/Settings.Theme.AlterDialog</item>    
  16. <!--设置picker style-->
    <item name="*android:numberPickerStyle">@style/Settings.Theme.NumberPicker</item>
  17. </style>
  18. <style name="Settings.Theme.NumberPicker" parent="@*android:style/Widget.Funui.NumberPicker">
  19. <item name="*android:selectionDivider">@drawable/numberpicker_selection_divider</item>
  20. </style>

这时候你会发现,我们的设置并没有起到作用,然后替换第二种

也就是在代码中创建picker的时候,传入一个属性

  1. new TimePickerDialog(this, SchedulePowerOnOff.Theme.NumberPicker, this, mHour, mMinutes, DateFormat.is24HourFormat(this)).show();

这时候你会发现又出现了问题,那就是这个时间弹出来的时候,不具有dialog风格了,也就是说,你的属性过滤掉了dialog风格,因为说到底,这个TimePickerDialog外层就是一个dialog

最后听了同事的方法,完美解决了问题,那就是,在dialog属性里面添加TimePickerDialog的风格,如下

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <resources>
  3. <style name="SchedulePowerOnOff.Theme" parent="@android:style/Theme.Funui">
  4. <item name="android:windowFullscreen">true</item>
  5. <item name="android:actionBarStyle">@style/actionbar_def_style</item>
  6. <item name="android:listChoiceIndicatorMultiple">@drawable/btn_check_funui</item>
  7. <item name="android:switchStyle">@style/mySwitchStyle</item>
    <!--这个是关键,是对picker产生作用的过度属性-->
    <item name="android:alertDialogTheme">@style/SchedulePowerOnOff.Theme.AlertDialog</item>
  8. <!--dialog外层的picker属性产生影响-->
    <item name="*android:numberPickerStyle">@style/SchedulePowerOnOff.Theme.NumberPicker</item>
  9. </style>
  10. <style name="mySwitchStyle" parent="@*android:style/Widget.Funui.CompoundButton.Switch">
  11. <item name="android:track">@drawable/switch_track_funui</item>
  12. </style>
  13. <style name="SchedulePowerOnOff.Theme.AlertDialog" parent="@*android:style/Theme.Funui.Dialog.Alert">
  14. <item name="android:listChoiceIndicatorSingle">@drawable/btn_radio_funui</item>
  15. <item name="android:listChoiceIndicatorMultiple">@drawable/btn_check_funui</item>
  16. <item name="*android:numberPickerStyle">@style/SchedulePowerOnOff.Theme.NumberPicker</item>
  17. </style>
  18. <style name="actionbar_def_style" parent="@android:style/Widget.Funui.ActionBar">
  19. <item name="android:displayOptions">homeAsUp|showTitle</item>
  20. <item name="android:background">#b54cff</item>
  21. </style>
  22. <style name="SchedulePowerOnOff.Theme.NumberPicker" parent="@*android:style/Widget.Funui.NumberPicker">
  23. <item name="*android:selectionDivider">@drawable/numberpicker_selection_divider</item> 
    <!--下划线的宽度-->     
            <item name="android:selectionDividerHeight">0.5dip</item>
    </style>
  24. </resources>

这个其实你会发现,以后所有类似的情况都可以用这中方法解决,也就是说,如果一个控件里面包含其他的控件,想在theme中更改内层的控件,就必须在他的外层中进行修改。注意,这时候他的父类集成的是Theme.

TimePickerDialog -下划线颜色修改的更多相关文章

  1. 让控制台支持 ANSI 转义序列,输出下划线、修改颜色或其他控制

    各种操作系统的控制台都支持 ANSI 转义序列(ANSI Escape Code).使用转义序列,可以对控制台进行很多额外的定制,例如修改颜色.修改标题栏,将文字添加下划线等. 当然,.NET 已经帮 ...

  2. iOS - UIButton设置文字标题下划线以及下划线颜色

    创建button设置可以折行显示 - (void)viewDidLoad { [super viewDidLoad]; UIButton * button = [[UIButton alloc] in ...

  3. CSS改变字体下划线颜色

    下图是网页中一个非常普通的列表. watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvQXVndXMzMzQ0/font/5a6L5L2T/fontsize/40 ...

  4. 隐藏android中EditText中的下划线以及修改光标颜色

    在android开发中 EditTextText是我们经常用到的,我们使用时会有一些小问题,当我们点击输入文字时,EditText中的光标和下划线会变成粉红色. 解决方法很简单,我们只要在EditTe ...

  5. iOS 开发富文本之TTTAttributedLabel 在某个特定位置的文字添加跳转,下划线,修改字体大小,颜色

    @property(nonatomic , strong) TTTAttributedLabel * ttLabel; @property(nonatomic , strong) NSRange li ...

  6. Android 入门(2)修改EditText下划线颜色 / 隐藏标题栏

    1 添加颜色 colors.xml中增加 <color name="colorRed">#FF3300</color> 2 添加style styles.x ...

  7. 利用伪元素和css3实现鼠标移入下划线向两边展开效果

    一.思路: 将伪元素:before和:after定位到元素底部中间,设置宽度从0变成100%达到目的. 二.实现: 1.首先定义一个块状元素(行内元素没有宽高)并修改样式为一个背景色为浅灰色的矩形,设 ...

  8. TabTopUnderLineLayout【自定义顶部选项卡(带下划线)】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 自定义顶部选项卡布局LinearLayout类,实现带下划线样式的效果. 备注:如果配合Fragment的话,MainActivit ...

  9. TabTopAutoLayout【自定义顶部选项卡区域(带下划线)(动态选项卡数据且可滑动)】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 自定义顶部选项卡布局LinearLayout类,实现带下划线且可滑动效果.[实际情况中建议使用RecyclerView] 备注:如果 ...

随机推荐

  1. HDU 4917 Permutation 拓扑排序的计数

    题意: 一个有n个数的排列,给你一些位置上数字的大小关系.求合法的排列有多少种. 思路: 数字的大小关系可以看做是一条有向边,这样以每个位置当点,就可以把整个排列当做一张有向图.而且题目保证有解,所以 ...

  2. unity SystemInfo类 获得电量battery

    我觉得用Unity 开发最爽的地方, 不是unity跨平台,而是用其他语言,要用很复杂的逻辑才能完成的功能,unity用一两句代码就能搞定 就比如说获取Android 系统的电量,不用发广播,不用申请 ...

  3. photoshop快捷键汇总

    图层应用相关快捷键: 复制图层:Ctrl+j 盖印图层:Ctrl+Alt+Shift+E 向下合并图层:Ctrl+E 合并可见图层:Ctrl+Shift+E 激活上一图层:Alt+中括号(]) 激活下 ...

  4. 题解 P1179 【数字统计】

    嚯嚯嚯,这道题很显然是削弱版的51nod P1042. 那么显然我们需要使用数位DP解题. 思路大致是这样的: 对于每一个数字,考虑三种影响关系: 1. 它对低位的影响 2. 它对高位的影响 3. 高 ...

  5. ubuntu中开启、关闭防火墙

    1.关闭ubuntu的防火墙        ufw disable 开启防火墙 ufw enable 2.卸载了iptables        apt-get remove iptables 3.关闭 ...

  6. 【 Beginning iOS 7 Development《精通iOS7开发》】05 Autorotation and Autosizing

    一.旋转后相对位置不变 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZ29nbGVy/font/5a6L5L2T/fontsize/400/fill/I0 ...

  7. Pocket英语语法---一、形容词性物主代词和名词性物主代词

    Pocket英语语法---一.形容词性物主代词和名词性物主代词 一.总结 一句话总结:名词性物主代词=形容词性物主代词+名词 Is that your umbrella? This is your c ...

  8. 7.包含(ng-Include)

    转自:https://www.cnblogs.com/best/tag/Angular/ 获取.编译并引用一个外部HTML片段(也可以是内部的) 默认情况下,模板URL被强制为使用与应用文档相同的域名 ...

  9. hashCode 和 equals 方法

    hashCode 和 equals 方法 hashCode()和equals()定义在Object类中,这个类是所有java类的基类,所以所有的java类都继承这两个方法. 使用hashCode()和 ...

  10. customErrors 元素(ASP.NET 设置架构)

    1.适用版本:.NET Framework 4 2.元素定义:为 ASP.NET 应用程序提供有关自定义错误消息的信息. 可以在应用程序文件层次结构中的任意级别上定义 customErrors 元素. ...