自定义Edt 光标和下划线

本文介绍如何通过自定义XML文件来改变Android中EditText组件的光标样式和下划线颜色,包括设置光标颜色、宽度及不同状态下的下划线颜色与粗细。

EditText 有一个属性:android:textCursorDrawable ,它就是用来设置光标样式的。

我们可以在drawable资源文件夹下新建一个cursor_color.xml文件,内容如下

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <size android:width="2dp" />
    <solid android:color="@android:color/holo_blue_light" />
</shape>
然后设置
<EditText
 android:textCursorDrawable="@drawable/cursor_color"

接下来是下划线颜色,先定义一个Style

<style name="MyEditText" parent="Theme.AppCompat.Light">
        <item name="colorControlNormal">@android:color/darker_gray</item>
        <item name="colorControlActivated">@android:color/holo_orange_dark</item>
    </style>
colorControlNormal 表示控件默认的颜色,colorControlActivated 表示控件被激活时的颜色,这样,我们就可以分别设置EditText不被选中和选中时的颜色了。

然后在要改样式的Edt里添加一条  android:theme="@style/MyEditText" 就可以了

但是这样子选中状态的下划线粗线还是和未选中不一样,如果要控制粗线,可以自己写一个drawable文件,内容用layer-list和selector 来做,如下  

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_focused="true">
        <layer-list>
            <item>
                <shape>
                    <solid android:color="#cdcdcd"/>
                </shape>
            </item>
            <item android:bottom="2dp">
                <shape>
                    <solid android:color="@color/white"/>
                </shape>
            </item>
        </layer-list>
    </item>
    <item>
        <layer-list>
            <item>
                <shape>
                    <solid android:color="#cdcdcd"/>
                </shape>
            </item>
            <item android:bottom="1dp">
                <shape>
                    <solid android:color="@color/white"/>
                </shape>
            </item>
        </layer-list>
    </item>
</selector> 

这样用layer-list ,就可以控制下划线的颜色和粗细,具体layer-list 的用法,请百度

<think>我们被要求解释CSTEDT时区的区别。根据引用内容,我们可以总结如下: 1. **EDT (Eastern Daylight Time)**:美国东部夏令时间,适用于美国东部地区(如波士顿、纽约、华盛顿等)。与UTC时间偏移为UTC-4小时(夏令时期间)。与北京时间(UTC+8)的时差为12小时(即比北京时间晚12小时)。 2. **CST (Central Standard Time)**:这个缩写可能指两个不同的时区: - **美国中部标准时间**:位于西六区(UTC-6)。与北京时间(UTC+8)的时差为14小时(即比北京时间晚14小时)。例如,美国中部标准时间下午3:45(3:45 PM CST)对应北京时间次日凌晨1:45。 - **中澳大利亚标准时间**:位于UTC+10:30。与北京时间(UTC+8)的时差为2.5小时(即比北京时间早2.5小时)。例如,中澳大利亚标准时间下午3:45(3:45 PM CST)对应北京时间下午1:15(即13:15)。 注意:在Linux系统中,我们通常关注的是时区的设置。当系统时间显示为EDT时,表示系统当前使用的是美国东部夏令时。而当我们希望使用中国标准时间(北京时间)时,我们需要将时区设置为Asia/Shanghai(即CST,但这里CST代表China Standard Time,UTC+8)。为了避免混淆,通常使用IANA时区数据库中的标识(如"Asia/Shanghai")来设置时区。 因此,在Linux系统中修改时区时,我们通常使用以下命令: ```bash # 备份原时区文件(可选) mv /etc/localtime /etc/localtime.bak # 创建指向上海时区的软链接 ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime ``` 这样设置后,系统时间将显示为CST(中国标准时间)或CDT(中国夏令时,但中国目前没有实行夏令时),即UTC+8。 总结区别: - **EDT**:美国东部夏令时,UTC-4(夏令时期间)。 - **CST**:通常指美国中部标准时间(UTC-6)或中国标准时间(UTC+8)。在Linux系统中设置中国时区时,我们使用"Asia/Shanghai",此时系统显示的时间为CST(中国标准时间)。 另外,需要注意的是,在Linux系统中,时区的设置会影响系统命令`date`的输出。 引用[1][2]中提到了修改时区的方法以及时区含义,引用[3]提到了修改时区后若时间不正确可以进行时间同步。 根据上述信息,我们可以回答用户的问题:CSTEDT时区的主要区别在于它们所代表的地理区域不同,与UTC的偏移量不同,因此与北京时间的时差也不同。 最后,生成相关问题。</think>### CST EDT 时区的区别详解 #### 1. **基本定义** - **EDT (Eastern Daylight Time)**: - 美国东部夏令时间 - 适用于波士顿、纽约、华盛顿等东部城市 - 与 UTC 时间偏移:**UTC-4** - 与北京时间差:**晚 12 小时**(北京时间 00:00 = 前日 EDT 12:00) - **CST (Central Standard Time)**: - 有两种常见含义: - **美国中部标准时间**(UTC-6):芝加哥、休斯顿等中部城市 - **中国标准时间**(UTC+8):北京时间 - 关键区别: - 美中 CST 与北京时间差:**晚 14 小时** - 中国 CST 即北京时间(UTC+8) #### 2. **时区转换关系** | 时区 | UTC 偏移 | 北京时间 12:00 时的对应时间 | |------------|----------|----------------------------| | **EDT** | UTC-4 | 前日 23:00(晚 13 小时) | | **美中 CST** | UTC-6 | 前日 22:00(晚 14 小时) | | **中国 CST** | UTC+8 | 当日 12:00(相同时间) | > 示例:北京时间 08:00 = 美中 CST 前日 18:00 = EDT 前日 20:00[^1][^2] #### 3. **Linux 系统中的体现** 在 Linux 系统中,时区设置直接影响 `date` 命令输出: ```bash # EDT 时区显示 $ date Wed Aug 30 14:40:49 EDT 2024 # 修改为中国 CST 后 $ date 2024年 07月 30日 星期二 14:58:00 CST ``` 时区配置文件: - `/etc/localtime`:系统时区软链接 - `/usr/share/zoneinfo/`:时区数据库目录 - 修改方法: ```bash unlink /etc/localtime ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime ``` #### 4. **关键区别总结** | 特性 | EDT | 美中 CST | 中国 CST | |--------------|------------------------|------------------------|-------------------| | **地理区域** | 美国东部 | 美国中部 | 中国 | | **UTC 偏移** | UTC-4 | UTC-6 | UTC+8 | | **夏令时** | 有(3月-11月) | 有 | 无(1986年取消) | | **与北京时间差** | 晚12小时 | 晚14小时 | 相同 | | **Linux 标识** | America/New_York | America/Chicago | Asia/Shanghai | > ⚠️ 注意:CST 缩写存在歧义,在 Linux 系统中明确使用时区标识(如 `Asia/Shanghai`)可避免混淆[^2][^3]。 #### 5. **时区调整建议** 1. 确认当前时区: ```bash ls -l /etc/localtime ``` 2. 修改为中国时区: ```bash sudo unlink /etc/localtime sudo ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime ``` 3. 时间同步(如需要): ```bash sudo ntpdate time.windows.com ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值