由于某些未知原因,MaterialDatePicker 在选择后返回不正确的日期。例如,用户位于墨西哥地区,时区为:America/Tijuana。当他在视觉表示中选择:2021-10-05时,在结果文本中我有-1天,2021-10-04。对于 RU 地区,一切正常。这是代码:
public void startDateSelectionPicker() {
try {
MaterialDatePicker<Long> picker = MaterialDatePicker.Builder.datePicker()
.setSelection(MaterialDatePicker.todayInUtcMilliseconds())
.setTheme(R.style.CustomDatePickerDialog)
.build();
picker.addOnPositiveButtonClickListener(selection -> {
TimeZone t = TimeZone.getDefault();
Calendar c1 = Calendar.getInstance();
c1.setTimeInMillis(selection);
c1.setTimeZone(TimeZone.getDefault());
//here I need to receive correct date, but receiving -1 from originally selected date.
String date = ToolsManager.calendarToDate(this, c1, "yyyy-MM-dd");
});
picker.show(getSupportFragmentManager(), picker.getTag());
} catch (IllegalArgumentException e) {
}
}
public static String calendarToDate(Context context, Calendar calendar, String dateFormat) {
if (calendar == null) {
return null;
}
Locale locale …Run Code Online (Sandbox Code Playgroud) timezone android android-calendar java-time materialdatepicker
升级到 Material Design 3 后,我注意到某些东西的背景颜色变成了我的原色设置的褪色版本。例如,如果我将主颜色设置为红色,则导航栏和日历现在有点粉红色。
<style name="AppTheme" parent="Base.AppTheme" />
<style name="Base.AppTheme" parent="Theme.Material3.DayNight.NoActionBar">
<item name="colorPrimary">@color/red</item>
</style>
Run Code Online (Sandbox Code Playgroud)
我不知道为什么材料设计假设我想要这些背景颜色。我的设计文档需要白色背景,并且无法将主色设置为白色。如果我根本不设置原色,它默认为紫色!
我对导航栏有一些运气,因为你可以设置每个项目的背景颜色,但对日历则没有运气。我尝试过在日历样式上设置所有听起来与颜色相关的内容。到目前为止,除了primaryColor 之外,日历背景没有任何改变。backgroundColor、backgroundTint 等。没有任何效果。有谁知道如何在 Material Design 3 上覆盖这种行为?
我只想将 colorPrimary 设置为绿色,并将 actionBar、navBar 和 calendar 的背景颜色设置为白色。
android android-calendar material-design android-navigationview android-navigation-bar
最近,当我尝试使用AlarmManager计划将来运行的活动时,我注意到了奇怪的行为.查看下面的代码,第一个活动在20秒内启动,而第二个活动不是在40秒内启动,而是在60秒后启动.任何人都可以解释为什么第二个意图没有安排调用第二个活动而不是第三个意图.这是否意味着我只能在AlarmManager中只有一个活动意图.
//pending intent for morning
Intent myIntent1 = new Intent(this, Activity1.class);
pendingIntent1 = PendingIntent.getActivity(this, 0, myIntent1, 0);
AlarmManager alarmManager1 = (AlarmManager)getSystemService(ALARM_SERVICE);
Calendar calendar1 = Calendar.getInstance();
//calendar1.set(Calendar.YEAR, Calendar.MONTH + 1, Calendar.DAY_OF_MONTH, morningTime, 0, 0);
calendar1.setTimeInMillis(System.currentTimeMillis());
calendar1.add(Calendar.SECOND, 20);
alarmManager1.set(AlarmManager.RTC_WAKEUP, calendar1.getTimeInMillis(), pendingIntent1);
//pending intent for noon
Intent myIntent2 = new Intent(this, Activity2.class);
pendingIntent2 = PendingIntent.getActivity(this, 0, myIntent2, 0);
AlarmManager alarmManager2 = (AlarmManager)getSystemService(ALARM_SERVICE);
Calendar calendar2 = Calendar.getInstance();
//calendar2.set(Calendar.YEAR, Calendar.MONTH + 1, Calendar.DAY_OF_MONTH, noonTime, 0, 0);
calendar2.setTimeInMillis(System.currentTimeMillis());
calendar2.add(Calendar.SECOND, 40);
alarmManager2.set(AlarmManager.RTC_WAKEUP, calendar2.getTimeInMillis(), pendingIntent2);
//pending intent for …Run Code Online (Sandbox Code Playgroud) android alarmmanager android-intent android-calendar android-pendingintent
我正在使用PhoneGap(又名Cordova)构建Android应用程序,并且无法使日历集成工作. 免责声明:我是Android和PhoneGap的菜鸟,请耐心等待.
我要做的就是在用户的日历中添加一个事件.在本教程之后,我创建了一个试图启动Calendar Intent的插件.代码如下所示:
public class CalendarPlugin extends Plugin {
public static final String NATIVE_ACTION_STRING="addToCalendar";
public static final String SUCCESS_PARAMETER="success";
@Override
public PluginResult execute(String action, JSONArray data, String callbackId) {
if (NATIVE_ACTION_STRING.equals(action)) {
Calendar beginTime = Calendar.getInstance();
beginTime.set(2012, 6, 19, 7, 30);
Calendar endTime = Calendar.getInstance();
endTime.set(2012, 6, 19, 8, 30);
Intent calIntent = new Intent((Context) this.ctx, CalendarPlugin.class)
.setAction(Intent.ACTION_INSERT)
.putExtra(Events.TITLE, "A new event")
.putExtra(CalendarContract.EXTRA_EVENT_ALL_DAY, true)
.putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, beginTime.getTimeInMillis())
.putExtra(CalendarContract.EXTRA_EVENT_END_TIME, endTime.getTimeInMillis());
this.ctx.startActivity(calIntent);
return new PluginResult(PluginResult.Status.OK, "Smashing success");
}
return …Run Code Online (Sandbox Code Playgroud) android android-intent android-calendar phonegap-plugins cordova
我想在Android中获取当前日期日/月/年最小值:秒,所以我使用了以下代码
String data="";
Calendar c = Calendar.getInstance();
data=c.getTime().toGMTString();
Run Code Online (Sandbox Code Playgroud)
但Eclipse通知我该方法.toGMTString();已被弃用.
如何将当前日期作为格式化字符串获取,避免使用此弃用方法?
我使用下面的代码来获取和加载我的应用程序中的日历事件.它工作得很好.但现在我想获得指定日期范围的事件.我怎么才能得到它..
Cursor cursor = getContentResolver().query(
Uri.parse("content://com.android.calendar/events"),
new String[] { "_id", "title", "dtstart", "dtend" }, null,
null, "dtstart ASC");
Run Code Online (Sandbox Code Playgroud)
应该是
dtstart ="2013-01-01"
dtend ="2013-01-31"
我正在使用CalendarView上的应用程序.我必须以小线性布局显示calendarView.
显示整个页面时出现问题,该页面包含小线性布局中的calendarView. - >这需要10秒才能显示,这是很多时间......
布局中没有其他东西.
这是我的xml和snap ...
任何帮助都会受到强烈关注 ......
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<LinearLayout
android:layout_width="0dp"
android:layout_height="fill_parent"
android:layout_weight="1"
android:orientation="vertical" >
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="30"
android:paddingLeft="30dp" >
<TextView
android:id="@+id/txtDate"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="My Calendar"
android:textSize="50sp" />
<View
android:layout_width="fill_parent"
android:layout_height="2dp"
android:layout_alignParentBottom="true"
android:layout_marginBottom="40dp"
android:layout_marginRight="30dp"
android:background="@android:color/black" />
</RelativeLayout>
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="70"
android:paddingBottom="30dp"
android:paddingLeft="20dp"
android:paddingRight="20dp"
android:paddingTop="30dp" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center"
android:orientation="vertical" >
<ListView
android:id="@+id/list_task"
android:layout_width="fill_parent"
android:layout_height="wrap_content" >
</ListView>
</LinearLayout>
</RelativeLayout>
</LinearLayout>
<LinearLayout
android:layout_width="0dp"
android:layout_height="fill_parent"
android:layout_weight="1" …Run Code Online (Sandbox Code Playgroud) 我正在遵循rfc2445规范并向cal插入一个循环事件,但始终会得到无效的重复错误.
Invalid recurrence rule: RRULE:FREQ=WEEKLY;UNTIL=20141007T000000Z;WKST=SU;BYDAY=TU,TH
这是我的代码,注意我返回上面的常量rrule字符串,以确保我没有违反规范,我只是改变从1997年到2014年的年份.任何想法为什么它不起作用?谢谢
ContentResolver cr = getContentResolver();
ContentValues values = new ContentValues();
values.put(CalendarContract.Events.DTSTART, model.getStartTime().toMillis(false));
values.put(CalendarContract.Events.DTEND, model.getEndTime().toMillis(false));
values.put(CalendarContract.Events.EVENT_TIMEZONE, timezone);
values.put(CalendarContract.Events.TITLE, model.getTitle());
values.put(CalendarContract.Events.EVENT_LOCATION, model.getLocation().getName());
values.put(CalendarContract.Events.DESCRIPTION, model.getDescription());
values.put(CalendarContract.Events.CALENDAR_ID, calId);
String recurString ="RRULE:FREQ=WEEKLY;UNTIL=20141007T000000Z;WKST=SU;BYDAY=TU,TH"
values.put(CalendarContract.Events.RRULE, recurString);
Uri uri = cr.insert(CalendarContract.Events.CONTENT_URI, values);
Run Code Online (Sandbox Code Playgroud) 我使用以下方法来获取日历的所有事件:
public Cursor getEventsCursor(Context context) {
long curr = System.currentTimeMillis();
long begin = curr - DateUtils.DAY_IN_MILLIS * 30; // - 30 days
long end = curr + DateUtils.DAY_IN_MILLIS * 30; // + 30 days
Cursor cur = null;
ContentResolver cr = context.getContentResolver();
String selection = Events.VISIBLE + "= ?";
String[] selectionArgs = new String[] {"1"};
String order = Events.DTSTART + " DESC";
Uri.Builder builder = Instances.CONTENT_URI.buildUpon();
ContentUris.appendId(builder, begin);
ContentUris.appendId(builder, end);
return cr.query(builder.build(), EVENT_PROJECTION,
selection, selectionArgs, order);
}
Run Code Online (Sandbox Code Playgroud)
它有效,但是我得到所有重复事件的初始时间!
日志
Feeder …Run Code Online (Sandbox Code Playgroud) android ×10
android-calendar ×10
calendar ×2
alarmmanager ×1
android-date ×1
cordova ×1
java-time ×1
timezone ×1