以编程方式在窗口小部件中设置TextClock的日期格式

时间:2013-08-23 16:34:57

标签: android android-widget widget date-format remoteview

我必须设置一个TextClock来显示另一个TextClock中的时间和日期。我希望能够让用户更改日期的格式。例如。而不是他们想要的dd MMMM yyyyMMMM dd yyyy将显示2013年1月1日。

我已经设置了一个微调器和数组,可以在config活动中选择它,但想知道如何更改TextClock格式,就像我刚才提到的那样。我试过views.set. ......但一无所获。

当然必须有一种方法来改变我在xml文件中的格式

android:format12Hour="dd MMMM yyyy"
android:format24Hour="dd MMMM yyyy"

在java文件中..

3 个答案:

答案 0 :(得分:1)

这就是你需要做的事情:

remoteView.setCharSequence(R.id.widget_current_date, "setFormat12Hour", datePattern);

答案 1 :(得分:0)

是的,TextClock实例有一个setFormat12Hour(CharSequence)方法和24小时。 char序列就像你提到的那样。

答案 2 :(得分:0)

更新:2018年1月31日: 有一种更简单的方法可以通过调用setCharSequence来设置24小时表单,如下所示:stackoverflow问题接受答案: Can't call setFormat24Hour of a TextClock in a Widget

旧的替代答案: 由于窗口小部件视图是通过RemoteViews android类以编程方式访问的,并且该类没有公开set24hourformat方法,因此您必须通过创建两个XML布局(每个格式要切换一个)来解决此问题,然后设置使用RemoteViews构造函数的XML布局。

有点痛苦,但只能使用当前的SDK API。

以下是您将放入onUpdate()的示例:

@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds){
    RemoteViews views = null;
    int layoutID = 0;
    if (TwentyFourHourOn){
        layoutID = R.layout.widget_clock_with_24hour;
    } else {
        layoutID = R.layout.widget_clock_with_12hour;
    }

    // the layoutID that is passed in the constructor of the
    //   RemoteViews object is the layout that will be loaded
    //   when the widget is updated.
    views = new RemoteViews(context.getPackageName(), layoutID);

    for (int i = 0; i < appWidgetIds.length; i++) {
        appWidgetManager.updateAppWidget(appWidgetIds[i], views);
    }
}
相关问题