当前位置: 首页 > 知识库问答 >
问题:

更改TimePicker文本颜色

龙嘉誉
2023-03-14

我一直试图改变我的时间选择器的文本颜色。但是我找不到父样式的位置。我两个都试过了

<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我看过的几个问题来解决这个问题:

  1. 我如何覆盖TimePicker来更改文本颜色——我认为这个问题离答案很近,但我不完全确定我需要做什么?我需要导入Android TimePicker风格到我的项目?
  2. https://stackoverflow.com/questions/24973586/set-textcolor-for-timepicker-in-customized-app-theme-没有给出答案。
  3. 我如何改变我的时间选择器和日期选择器的文本颜色?-尝试了0票答案,但不起作用。
  4. 如何更改Android中DatePicker和TimePicker对话框的默认颜色?-再次无法以类似的方式找到TimePicker。
  5. Android-如何更改TimePicker中的文本颜色?-再次,找不到实际的TimePicker父。

这些可能是解决我问题的最好的问题/答案,但没有一个对我有帮助。如果能得到一个明确的答案就好了。

共有3个答案

钱欣悦
2023-03-14

一个TimePicker实际上只是两个NumberPickers。查看小部件。NumberPicker样式和布局,您可以找到它使用的

@style/TextAppearance.Large.Inverse.NumberPickerInputText

不幸的是,textpearance。大的相反的NumberPickerInputText不使用您可以在主题中设置的属性之一。所以你有两个选择:

>

  • 复制必要的类来创建自己版本的NumberPickerTimePicker。(你也许可以从像全息无处不在这样的库中提取一些东西)

    使用黑客。

    如果您想走第二条路线,可以这样做:

    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)。

  • 韩良策
    2023-03-14

    不确定为什么需要深入研究Java反射API来实现这一点。这是一个简单的造型问题。需要覆盖的属性是:textColorPrimary

    <style name="AppTheme" parent="@android:style/Theme.Holo.Light">
        ....
        <item name="android:textColorPrimary">#ff0000</item>
    </style>
    

    如果您在对话框中使用计时器,请覆盖对话框主题中的android:textColorPrimary

    就这样。

    郎雅昶
    2023-03-14

    我结合了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中和的颜色: 我尝试了我的: 更改标题的颜色,但它也会更改我工具栏中文本的颜色(我不想要)。 似乎正确地更改了摘要的颜色。 如何在不影响工具栏文本颜色的情况下更改标题颜色?