gpt4 book ai didi

Android:更改标准 TimePicker 中的时间分隔符?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:03:55 24 4
gpt4 key购买 nike

如何更改标准的时间分隔符。到:在安卓应用程序中?我使用的是 minSDK 15 和 targetSDK 20。

time separator

最佳答案

这个答案讨论了 TimePicker 类,因为 OP 将其指定为赏金中的一项要求,并且随着 Android 5/Lollipop 的发布对该元素进行了一些代码返工,因此添加了一些内容。


怎么做?

不能使用单个简单调用简单地修改分隔文本。分隔 rune 本在 TimePicker.setDividerText() 内部设置,这是一个私有(private)方法,这意味着它也不能被覆盖。更难的是,分隔 rune 本 View 变量 mDivider 也被设置为私有(private),这意味着我们无法直接访问分隔 rune 本 View 。

该问题的一个简单解决方案是在构造函数设置值后简单地覆盖该值。为此,我们创建自己的 TimePicker 子类,尝试找到分频器并设置它的值。只要布局与 AOSP 匹配,这就可以正常工作。 看着 OEM 皮肤和耸肩

参见 source of the android.widget.TimePicker class作为引用。假设正在研究 android-l-preview_r2 标签,请检查第 91 行的 mDivider 变量声明和第 531-553 行的 setDividerText() 方法。

在实践中,好吗?

import android.content.Context;
import android.content.res.Resources;
import android.util.AttributeSet;
import android.widget.TextView;
import android.widget.TimePicker;

public class CustomTimePicker extends TimePicker {
public CustomTimePicker(Context context) {
super(context);
init();
}

public CustomTimePicker(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}

public CustomTimePicker(Context context, AttributeSet attrs,
int defStyle) {
super(context, attrs, defStyle);
init();
}

private void init() {
TextView divider = (TextView) findViewById(Resources.getSystem()
.getIdentifier("divider", "id", "android"));
// the divider doesn't exist in the old-school widget style
if (divider != null) {
divider.setText(":");
}
}
}

这不适用于 Android L!

所描述的方法对 KitKat 有效,但在针对 L 编译时不再适用。如果您检查 TimePicker on android-5.0.0_r2 ,您会发现样式的处理被卸载到单独的委托(delegate)类。 TimePickerClockDelegate类似乎是类似于遗留选择器的类。

有关私有(private)变量和方法的问题在 Android 5.0.0 中仍然存在,新的结构使事情变得更加复杂。如果您仍然认为要中断本地化(请参阅下面的您应该这样做吗? 部分),您最好使用自定义 TimePicker 实现。一个好的起点可能是选择新的 TimePicker 和 TimePickerClockDelegate 类,合并它们并删除抽象层并修改分隔 rune 本设置代码,就像在 KitKat 版本中所做的那样。无论如何,这超出了简单而有用的答案的范围,因为采用该路线会产生许多副作用,例如破坏系统范围的主题能力,因此应该明智地考虑。


你应该这样做吗?

不是真的。

TimePicker 实际上会选择 : 字符作为默认分隔符,以防出现任何问题,但它更喜欢本地化的变体。

这意味着如果locale您使用的偏好将时间写为 HH:mm,选择器将自动使用 : 作为分隔符,但如果您的语言环境使用 HH.mm 那么选择器将简单地使用 . 作为分隔符。如果有一个语言环境会以 HH/mm 格式写入时间,选择器会自动适应并使用 / 作为分隔符以提供与本地格式的一致性(又名本地化)。

如果您觉得必须覆盖此行为,可以使用上述方法,但请记住,这样做不利于本地化,甚至不利于各种应用程序的一致性。

关于Android:更改标准 TimePicker 中的时间分隔符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26563482/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com