我一直试图改变我的时间选择器的文本颜色。但是我找不到父样式的位置。我两个都试过了
<style name="MyTimePicker" parent="@android:style/Widget.Holo.TimePicker">
<item name="android:textColor">@color/text</item>
</style>
和
<style name="MyTimePicker" parent="@android:style/Widget.TimePicker">
<item name="android:textColor">@color/text</item>
</style>
我的minSdkVersion
是15。我的targetSdkVersion
是20。我已经重建并清理了我的项目
我想我已经解决了所有类似的问题,但没有一个真正为我提供了解决方案。唯一可行的答案是使用某种库,但我不太喜欢这种解决方案。到父级的路径是否与我正在使用的路径有所不同,因为我非常确定我应该能够以某种方式访问它?
编辑
这是主题的应用方式;
<TimePicker
style="@style/MyTimePicker"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/timePicker"
android:layout_below="@+id/textView"
android:layout_centerHorizontal="true" />
请注意,这是我收到的错误(之前忘记放置):
错误:检索项的父项时出错:未找到与给定名称“@android:style/Widget”匹配的资源。全息图。时间选择器'。
编辑2我看过的几个问题来解决这个问题:
这些可能是解决我问题的最好的问题/答案,但没有一个对我有帮助。如果能得到一个明确的答案就好了。
一个TimePicker
实际上只是两个NumberPicker
s。查看小部件。NumberPicker
样式和布局,您可以找到它使用的
@style/TextAppearance.Large.Inverse.NumberPickerInputText
不幸的是,textpearance。大的相反的NumberPickerInputText
不使用您可以在主题中设置的属性之一。所以你有两个选择:
>
复制必要的类来创建自己版本的NumberPicker
和TimePicker
。(你也许可以从像全息无处不在这样的库中提取一些东西)
使用黑客。
如果您想走第二条路线,可以这样做:
private int mNumberPickerInputId = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Resources system = Resources.getSystem();
// This is the internal id of the EditText used in NumberPicker (hack)
mNumberPickerInputId =
system.getIdentifier("numberpicker_input", "id", "android");
// just used for full example, use your TimePicker
TimePicker timePicker = new TimePicker(this);
setContentView(timePicker);
final int hourSpinnerId =
system.getIdentifier("hour", "id", "android");
View hourSpinner = timePicker.findViewById(hourSpinnerId);
if (hourSpinner != null) {
setNumberPickerTextColor(hourSpinner, Color.BLUE);
}
final int minSpinnerId =
system.getIdentifier("minute", "id", "android");
View minSpinner = timePicker.findViewById(minSpinnerId);
if (minSpinner != null) {
setNumberPickerTextColor(minSpinner, Color.BLUE);
}
final int amPmSpinnerId =
system.getIdentifier("amPm", "id", "android");
View amPmSpinner = timePicker.findViewById(amPmSpinnerId);
if (amPmSpinner != null) {
setNumberPickerTextColor(amPmSpinner, Color.BLUE);
}
}
private void setNumberPickerTextColor(View spinner, int color) {
TextView input = (TextView) spinner.findViewById(mNumberPickerInputId);
input.setTextColor(color);
}
编辑
经过进一步调查,这项黑客技术并不是很有效。它不允许您更改NumberPicker
上/下值的颜色。使用与颜色交互后,颜色也会重置。似乎您唯一的选择是创建您自己的必要类副本(上面的选项1)。
不确定为什么需要深入研究Java反射API来实现这一点。这是一个简单的造型问题。需要覆盖的属性是:textColorPrimary
。
<style name="AppTheme" parent="@android:style/Theme.Holo.Light">
....
<item name="android:textColorPrimary">#ff0000</item>
</style>
如果您在对话框中使用
计时器
,请覆盖对话框主题中的android:textColorPrimary
。
就这样。
我结合了Paul Burke的答案和Simon的答案,成功地编辑了时间选择器的文本颜色。
以下是它是如何实现的:
java prettyprint-override">TimePicker time_picker; //Instantiated in onCreate()
Resources system;
private void set_timepicker_text_colour(){
system = Resources.getSystem();
int hour_numberpicker_id = system.getIdentifier("hour", "id", "android");
int minute_numberpicker_id = system.getIdentifier("minute", "id", "android");
int ampm_numberpicker_id = system.getIdentifier("amPm", "id", "android");
NumberPicker hour_numberpicker = (NumberPicker) time_picker.findViewById(hour_numberpicker_id);
NumberPicker minute_numberpicker = (NumberPicker) time_picker.findViewById(minute_numberpicker_id);
NumberPicker ampm_numberpicker = (NumberPicker) time_picker.findViewById(ampm_numberpicker_id);
set_numberpicker_text_colour(hour_numberpicker);
set_numberpicker_text_colour(minute_numberpicker);
set_numberpicker_text_colour(ampm_numberpicker);
}
private void set_numberpicker_text_colour(NumberPicker number_picker){
final int count = number_picker.getChildCount();
final int color = getResources().getColor(R.color.text);
for(int i = 0; i < count; i++){
View child = number_picker.getChildAt(i);
try{
Field wheelpaint_field = number_picker.getClass().getDeclaredField("mSelectorWheelPaint");
wheelpaint_field.setAccessible(true);
((Paint)wheelpaint_field.get(number_picker)).setColor(color);
((EditText)child).setTextColor(color);
number_picker.invalidate();
}
catch(NoSuchFieldException e){
Log.w("setNumberPickerTextColor", e);
}
catch(IllegalAccessException e){
Log.w("setNumberPickerTextColor", e);
}
catch(IllegalArgumentException e){
Log.w("setNumberPickerTextColor", e);
}
}
}
请注意,这个答案可能已经过时了。不久前,我遇到了一些可能有问题的问题(更多细节请参见我的问题)。否则,您可能应该遵循Vikram的答案。
我正在做我的项目,在某个阶段,我需要更改某些单词的颜色(在本例中是Hashtags)。 控制器中有以下代码: (请注意,“resultado”是一个有效字符串,可以毫无问题地获取推文) 我使用listaPropia从原始列表中获取所需内容 此时,我应该有完整的项目列表,“textoAManipular”字段应该有一个从class=“elem1”到class=“elem5”的标记 现在,在视图中:
问题内容: 我想更改与数组索引匹配的UITextView中特定文本的文本颜色。我能够略微修改此答案,但不幸的是,每个匹配短语的文本颜色仅更改了一次。 问题答案: 抱歉,我刚注意到您的消息。这是一个工作示例(在操场上测试):
如何将标题字体颜色更改为白色,填充为绿色?以下是我正在使用的类: 我相信,这是必须插入的代码。
问题内容: 我正在编写一个简单的扫雷游戏,现在可以运行,但是我正在处理一些漂亮的细节,例如使每个数字使用不同的颜色。 尝试在上设置文本颜色时,我总是遇到错误。我可以很容易地更改文本和背景,但是不能专门更改文本颜色。 导致一切混乱的部分是: 由于某种原因,我的错误是: 每当我尝试编译时都会发生这种情况,但是当我将其更改为说而不是正常工作时,就会发生这种情况。 问题答案: 对于JButton未定义。要
问题内容: 我制作了一个使用 ActionBarCompat* 的应用程序 * 我使用 SlidingTabLayout 类创建了选项卡。 该类是这样的: SlidingTabLayout.java 但我无法更改标签的颜色… 我的viewpager片段是这样的: 该应用程序运行良好,但我无法更改标签的 颜色文本 … 看到以下示例后,我制作了该应用程序: rudsonlive /导航抽屉-ViewP
如何更改以下首选项XML中和的颜色: 我尝试了我的: 更改标题的颜色,但它也会更改我工具栏中文本的颜色(我不想要)。 似乎正确地更改了摘要的颜色。 如何在不影响工具栏文本颜色的情况下更改标题颜色?