【问题标题】:Set Date Format Of TextClock In A Widget Programatically以编程方式在小部件中设置 TextClock 的日期格式
【发布时间】:2013-08-26 19:05:33
【问题描述】:

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

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

肯定有办法像我在 xml 文件中那样更改格式

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

在java文件中..

【问题讨论】:

  • 我提供的答案完美,请标记为正确答案

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


【解决方案1】:

这就是你需要做的:

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

【讨论】:

  • 我试过你上面的代码仍然不能工作 textclock 仅显示 24 小时格式。
  • 如何将 datepattern 赋予 charseq,例如“dd MMM yyyy hh:mm a”
【解决方案2】:

更新: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);
    }
}

【讨论】:

  • 为什么说“类不公开 set24hourformat 方法”?它确实
  • @2cupoftech TextClock 公开了 set24hourformat() 方法。但 RemoteView 没有。在 android 小部件中,您必须通过 RemoteView
  • 在下面查看我的答案
【解决方案3】:

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

【讨论】:

  • 是的,我可以在常规 Activity 上使用它,但是在小部件中是否有替代方案?
  • 这不起作用,因为必须使用 RemoteView。因此,我们需要一个 RemoteView 方法来实现这一点。我也有同样的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-20
  • 1970-01-01
相关资源
最近更新 更多