android-TimePickerDialog 下划线颜色修改

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

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

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

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal"
    android:orientation="horizontal"
    android:gravity="center">

    <LinearLayout android:id="@+id/pickers"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:orientation="horizontal"
        android:gravity="center">

        <!-- Month -->
        <NumberPicker
            android:id="@+id/month"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="16dip"
            android:layout_marginBottom="16dip"
            android:layout_marginStart="8dip"
            android:layout_marginEnd="8dip"
            android:focusable="true"
            android:focusableInTouchMode="true"
            />

        <!-- Day -->
        <NumberPicker
            android:id="@+id/day"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="16dip"
            android:layout_marginBottom="16dip"
            android:layout_marginStart="8dip"
            android:layout_marginEnd="8dip"
            android:focusable="true"
            android:focusableInTouchMode="true"
            />
 <!-- Year -->
        <NumberPicker
            android:id="@+id/year"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="16dip"
            android:layout_marginBottom="16dip"
            android:layout_marginStart="8dip"
            android:layout_marginEnd="16dip"
            android:focusable="true"
            android:focusableInTouchMode="true"
            />

    </LinearLayout>

    <!-- calendar view -->
    <CalendarView
        android:id="@+id/calendar_view"
        android:layout_width="245dip"
        android:layout_height="280dip"
        android:layout_marginStart="16dip"
        android:layout_marginEnd="16dip"
        android:layout_weight="1"
        android:focusable="true"
        android:focusableInTouchMode="true"
        />

</LinearLayout>

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

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

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

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

<resources>
    <style name="Settings.Theme" parent="Custom_Settings_Theme">
        <item name="apnPreferenceStyle">@style/ApnPreference</item>
        <item name="android:actionBarTabTextStyle">@style/customActionBarTabTextStyle</item>
        <item name="android:actionBarStyle">@style/SettingsBarStyle</item>
        <item name="android:actionBarTabStyle">@style/SettingsActionBarTabView</item>
        <item name="*android:actionMenuLandTextColor">#ffffff</item>
        <item name="android:actionMenuTextColor">@color/action_menu_text_color</item>
        <item name="*android:homeAsUpIndicator">@drawable/ic_ab_back_holo_dark_am</item>
        <item name="wifi_signal">@drawable/wifi_signal_light</item>
        <item name="android:windowFullscreen">true</item>
        <item name="android:switchStyle">@style/mySwitchStyle</item>
        <item name="android:listChoiceIndicatorSingle">@drawable/btn_radio_funui</item>
        <item name="android:listChoiceIndicatorMultiple">@drawable/btn_check_funui</item>
        <item name="android:alertDialogTheme">@style/Settings.Theme.AlterDialog</item>    
<!--设置picker style-->        <item name="*android:numberPickerStyle">@style/Settings.Theme.NumberPicker</item>
    </style>
    <style name="Settings.Theme.NumberPicker" parent="@*android:style/Widget.Funui.NumberPicker">
        <item name="*android:selectionDivider">@drawable/numberpicker_selection_divider</item>
    </style>

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

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

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

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

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

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="SchedulePowerOnOff.Theme" parent="@android:style/Theme.Funui">
        <item name="android:windowFullscreen">true</item>
        <item name="android:actionBarStyle">@style/actionbar_def_style</item>
        <item name="android:listChoiceIndicatorMultiple">@drawable/btn_check_funui</item>
        <item name="android:switchStyle">@style/mySwitchStyle</item> <!--这个是关键,是对picker产生作用的过度属性-->        <item name="android:alertDialogTheme">@style/SchedulePowerOnOff.Theme.AlertDialog</item>
<!--dialog外层的picker属性产生影响-->        <item name="*android:numberPickerStyle">@style/SchedulePowerOnOff.Theme.NumberPicker</item>
    </style>
    <style name="mySwitchStyle" parent="@*android:style/Widget.Funui.CompoundButton.Switch">
        <item name="android:track">@drawable/switch_track_funui</item>
    </style>
    <style name="SchedulePowerOnOff.Theme.AlertDialog" parent="@*android:style/Theme.Funui.Dialog.Alert">
        <item name="android:listChoiceIndicatorSingle">@drawable/btn_radio_funui</item>
        <item name="android:listChoiceIndicatorMultiple">@drawable/btn_check_funui</item>
        <item name="*android:numberPickerStyle">@style/SchedulePowerOnOff.Theme.NumberPicker</item>
    </style>
    <style name="actionbar_def_style" parent="@android:style/Widget.Funui.ActionBar">
        <item name="android:displayOptions">homeAsUp|showTitle</item>
        <item name="android:background">#b54cff</item>
    </style>
    <style name="SchedulePowerOnOff.Theme.NumberPicker" parent="@*android:style/Widget.Funui.NumberPicker">
        <item name="*android:selectionDivider">@drawable/numberpicker_selection_divider</item> <!--下划线的宽度-->              <item name="android:selectionDividerHeight">0.5dip</item>    </style>
</resources>

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

时间: 2024-08-04 10:36:55

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

Android之自定义EditText光标和下划线颜色

"-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> Android之自定义EditText光标和下划线颜色 - Lindroid的博客 - 博客频道 - CSDN.NET Lindroid的博客 不积跬步,无以至千里. 目录视图 摘要视图 订阅 [活动]2017 CSDN博客专栏评选 &nbsp [5月书讯]流畅的Py

CSS改变字体下划线颜色

下图是网页中一个很普通的列表. 这次去见客户的时候,客户觉得下划线的颜色可以变变,网页就变得不单调了(据后来了解,客户上学时出板报,所以对网站的布局和细节非常的重视).做网站那么久,第一次要换下划线颜色,客户就是上帝,提出这个需求,立马查阅相关资料,发现下划线颜色是随着字体的颜色改变的,不能单独改变. 额,那怎么办? 办法总比困难多,通过使用css border-bottom实现改变文字字体下划线颜色即可. CSS代码:style="border-bottom: 1px solid blue;t

android 布局下划线

1 <LinearLayout 2 android:layout_width="match_parent" 3 android:layout_height="wrap_content" 4 android:orientation="vertical" > 5 6 <TextView 7 android:id="@+id/TextView03" 8 android:layout_width="matc

Android studio的主题颜色修改

1.选择喜欢的主题 http://color-themes.com/?view=index 好几十款,总有一款你喜欢 2.下载你喜欢的主题,注意是jar文件 1.File -> Import Settings...  2.然后选择你下载的jar文件,重启OK

使用NSMutableAttributedString添加下划线、删除线、阴影、填充、不同字体颜色等

在iOS开发中,有时会遇到需要添加下划线,或者设置字符串中某几个字的颜色的情况,最常见的栗子就是注册页面,如图所示: 几乎所有注册页面中都会出现这么一句话 "点击下一步表示您已同意<用户服务协议>",而且可以看到,"<用户服务协议>"几个字是橙色的,并且它们下面还有下划线.这是怎么实现的呢? 有的同学可能会说:"不同颜色就设置两个label,让左边的label显示前半句并设置为黑色,让右边的label显示后半句并设置为橙色就行了.&

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

版权声明:本文为博主原创文章,未经博主允许不得转载. 前言 自定义顶部选项卡布局LinearLayout类,实现带下划线样式的效果. 备注:如果配合Fragment的话,MainActivity中的写法需要灵活处理. 效果图 代码分析 TabTopUnderLineLayout:顶部选项卡布局类——自定义的LinearLayout子类:实现了各个选项卡的布局.状态切换.点击事件的回调 使用步骤 一.项目组织结构图 注意事项: 1.  导入类文件后需要change包名以及重新import R文件路

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

版权声明:本文为博主原创文章,未经博主允许不得转载. 前言 自定义顶部选项卡布局LinearLayout类,实现带下划线且可滑动效果.[实际情况中建议使用RecyclerView] 备注:如果配合Fragment的话,MainActivity中的写法需要灵活处理. 效果图 代码分析 TabTopAutoLayout:底部选项卡布局类——自定义的LinearLayout子类:实现了各个选项卡的布局.状态切换.点击事件的回调. 需要注意:注释掉params.weight = 1; //设置要添加的子

viewpager按钮下加下划线

ViewPager是android扩展包v4包中的类,这个类可以让用户左右切换当前的view.我们首先来看看API对于这个类的表述: ? 1 2 3 Layout manager that allows the user to flip left and right through pages of data. You supply an implementation of a PagerAdapter to generate the pages that the view shows. Not

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

原帖地址   https://www.cnblogs.com/yangjunfei/p/6739683.html 感谢分享 一.思路: 将伪元素:before和:after定位到元素底部中间,设置宽度从0变成100%达到目的. 二.实现: 1.首先定义一个块状元素(行内元素没有宽高)并修改样式为一个背景色为浅灰色的矩形,设置相对定位. html代码 <div id="underline"></div> css样式 #underline{ width: 200px