From 1cbba4eae77c84ce380be40a6dcc4b024444f3a1 Mon Sep 17 00:00:00 2001 From: 17351781990 <827990754@qq.com> Date: Tue, 28 Sep 2021 15:40:57 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E4=BF=AE=E6=94=B9readme?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 61 +++++++++++++++++-- .../switchdatetime/MyApplication.java | 16 +++++ 2 files changed, 73 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 5da00a4..23701cf 100644 --- a/README.md +++ b/README.md @@ -37,11 +37,64 @@ allprojects { 并依据自己的版本创建新项目,将新项目的对应文件复制到根目录下 #### 使用说明 +1、初始化SwitchDateTimeDialogFragment ```java -dateTimeFragment.set24HoursMode(false); -dateTimeFragment.setHighlightAMPMSelection(false); -dateTimeFragment.setMinimumDateTime(new GregorianCalendar(2015, Calendar.JANUARY, 1).getTime()); -dateTimeFragment.setMaximumDateTime(new GregorianCalendar(2025, Calendar.DECEMBER, 31).getTime()); +SwitchDateTimeDialogFragment dateTimeFragment = SwitchDateTimeDialogFragment.newInstance( + getAbility(), + getString(ResourceTable.String_label_datetime_dialog), + "OK", + "Cancel", + getString(ResourceTable.String_clean) // Optional + ); +``` +2、设置日期 +```java + // Optionally define a timezone + dateTimeFragment.setTimeZone(TimeZone.getDefault()); + + // Init format + final SimpleDateFormat myDateFormat = new SimpleDateFormat("d MMM yyyy HH:mm", java.util.Locale.getDefault()); + // Assign unmodifiable values + dateTimeFragment.set24HoursMode(false); + dateTimeFragment.setHighlightAMPMSelection(false); + dateTimeFragment.setMinimumDateTime(new GregorianCalendar(2015, Calendar.JANUARY, 1).getTime()); + dateTimeFragment.setMaximumDateTime(new GregorianCalendar(2025, Calendar.DECEMBER, 31).getTime()); + + // Define new day and month format + try { + dateTimeFragment.setSimpleDateMonthAndDayFormat(new SimpleDateFormat("MMMM dd", Locale.getDefault())); + } catch (SwitchDateTimeDialogFragment.SimpleDateMonthAndDayFormatException e) { + + e.fillInStackTrace(); + } +``` +3、设置回调监听 +```java + // Set listener for date + dateTimeFragment.setOnButtonClickListener(new SwitchDateTimeDialogFragment.OnButtonWithNeutralClickListener() { + @Override + public void onPositiveButtonClick(Date date) { + textView.setText(myDateFormat.format(date)); + } + + @Override + public void onNegativeButtonClick(Date date) { + // Do nothing + } + + @Override + public void onNeutralButtonClick(Date date) { + // Optional if neutral button does'nt exists + textView.setText(""); + } + }); +``` +4、显示日历组件 +```java + dateTimeFragment.startAtCalendarView(); + dateTimeFragment.setDefaultDateTime(new GregorianCalendar(2017, + Calendar.MARCH, 4, 15, 20).getTime()); + dateTimeFragment.show(); ``` #### 测试信息 diff --git a/switchdatetime/src/main/java/com/kunzisoft/switchdatetime/MyApplication.java b/switchdatetime/src/main/java/com/kunzisoft/switchdatetime/MyApplication.java index 3914622..2ae846f 100644 --- a/switchdatetime/src/main/java/com/kunzisoft/switchdatetime/MyApplication.java +++ b/switchdatetime/src/main/java/com/kunzisoft/switchdatetime/MyApplication.java @@ -1,3 +1,19 @@ +/* + * Copyright (c) Huawei Technologies Co., Ltd. 2021-2021. All rights reserved. + *

+ * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + *

+ * http://www.apache.org/licenses/LICENSE-2.0 + *

+ * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + package com.kunzisoft.switchdatetime; import ohos.aafwk.ability.AbilityPackage; -- Gitee From d0c61d909cef053bc96d397da6c10aaa411a870a Mon Sep 17 00:00:00 2001 From: 17351781990 <827990754@qq.com> Date: Wed, 29 Sep 2021 16:11:05 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=A8=AA=E7=AB=96?= =?UTF-8?q?=E5=B1=8F=E5=88=87=E6=8D=A2=E5=B8=83=E5=B1=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- entry/src/main/config.json | 3 + .../slice/MainAbilitySlice.java | 55 +++- .../SwitchDateTimeDialogFragment.java | 50 ++- .../provider/CalendarProvider.java | 19 +- .../base/layout/calendar_item_layout_land.xml | 32 ++ .../dialog_switch_datetime_picker_land.xml | 300 ++++++++++++++++++ 6 files changed, 454 insertions(+), 5 deletions(-) create mode 100644 switchdatetime/src/main/resources/base/layout/calendar_item_layout_land.xml create mode 100644 switchdatetime/src/main/resources/base/layout/dialog_switch_datetime_picker_land.xml diff --git a/entry/src/main/config.json b/entry/src/main/config.json index 1d555f0..7f7434e 100644 --- a/entry/src/main/config.json +++ b/entry/src/main/config.json @@ -33,6 +33,9 @@ ] } ], + "configChanges": [ + "orientation" + ], "orientation": "unspecified", "name": "com.kunzisoft.switchdatetimesample.MainAbility", "icon": "$media:icon", diff --git a/entry/src/main/java/com/kunzisoft/switchdatetimesample/slice/MainAbilitySlice.java b/entry/src/main/java/com/kunzisoft/switchdatetimesample/slice/MainAbilitySlice.java index 0d651ef..f71ea4d 100644 --- a/entry/src/main/java/com/kunzisoft/switchdatetimesample/slice/MainAbilitySlice.java +++ b/entry/src/main/java/com/kunzisoft/switchdatetimesample/slice/MainAbilitySlice.java @@ -1,15 +1,20 @@ package com.kunzisoft.switchdatetimesample.slice; import com.kunzisoft.switchdatetime.SwitchDateTimeDialogFragment; +import com.kunzisoft.switchdatetimesample.MainAbility; import com.kunzisoft.switchdatetimesample.ResourceTable; - import ohos.aafwk.ability.AbilitySlice; import ohos.aafwk.content.Intent; import ohos.agp.components.Button; import ohos.agp.components.Component; import ohos.agp.components.Text; import ohos.agp.utils.Color; +import ohos.agp.window.service.Display; +import ohos.agp.window.service.DisplayManager; import ohos.agp.window.service.WindowManager; +import ohos.bundle.AbilityInfo; +import ohos.data.DatabaseHelper; +import ohos.data.preferences.Preferences; import java.text.SimpleDateFormat; import java.util.*; @@ -23,12 +28,29 @@ public class MainAbilitySlice extends AbilitySlice { private Text textView; private SwitchDateTimeDialogFragment dateTimeFragment; + private Preferences mOrientation; + private Preferences mTimeDataSave; @Override public void onStart(Intent intent) { super.onStart(intent); super.setUIContent(ResourceTable.Layout_ability_main); + // 创建轻量级数据存储 + DatabaseHelper databaseHelper = new DatabaseHelper(this); + mOrientation = databaseHelper.getPreferences("ori_pref"); + mTimeDataSave = databaseHelper.getPreferences("time_pref"); + + // 通过获取屏幕宽高来间接判断当前横竖屏情况,getDisplayOrientation()无法获取到横竖屏 + Display display = DisplayManager.getInstance().getDefaultDisplay(this).get(); + if (display.getAttributes().width > display.getAttributes().height) { + // 判断为横屏,保存 + mOrientation.putBoolean("orientation", false); + } else { + // 判断为竖屏,保存 + mOrientation.putBoolean("orientation", true); + } + WindowManager.getInstance().getTopWindow().get().setStatusBarColor(Color.getIntColor("#b71c1c")); textView = (Text) findComponentById(ResourceTable.Id_textView); // Construct SwitchDateTimePicker @@ -63,7 +85,7 @@ public class MainAbilitySlice extends AbilitySlice { dateTimeFragment.setOnButtonClickListener(new SwitchDateTimeDialogFragment.OnButtonWithNeutralClickListener() { @Override public void onPositiveButtonClick(Date date) { - textView.setText(myDateFormat.format(date)); + textView.setText(myDateFormat.format(date)); } @Override @@ -99,4 +121,33 @@ public class MainAbilitySlice extends AbilitySlice { public void onForeground(Intent intent) { super.onForeground(intent); } + + @Override + protected void onOrientationChanged(AbilityInfo.DisplayOrientation displayOrientation) { + super.onOrientationChanged(displayOrientation); + + if (AbilityInfo.DisplayOrientation.LANDSCAPE == displayOrientation) { + mOrientation.putBoolean("orientation", false); + } else if (AbilityInfo.DisplayOrientation.PORTRAIT == displayOrientation) { + mOrientation.putBoolean("orientation", true); + } + + if (dateTimeFragment.isShowing()){ + dateTimeFragment.destroy(); + // 刷新ability + onStart(null); + + // 重新show dialog + + dateTimeFragment.startAtCalendarView(); + System.out.println("-->>onOrientationChanged = "+mTimeDataSave.getInt("month",2)); + dateTimeFragment.setDefaultDateTime(new GregorianCalendar( + mTimeDataSave.getInt("year",2017), + mTimeDataSave.getInt("month",2), + mTimeDataSave.getInt("day",4), + mTimeDataSave.getInt("hour",15), + mTimeDataSave.getInt("minute",20)).getTime()); + dateTimeFragment.show(); + } + } } diff --git a/switchdatetime/src/main/java/com/kunzisoft/switchdatetime/SwitchDateTimeDialogFragment.java b/switchdatetime/src/main/java/com/kunzisoft/switchdatetime/SwitchDateTimeDialogFragment.java index ebba0f7..1612d9a 100644 --- a/switchdatetime/src/main/java/com/kunzisoft/switchdatetime/SwitchDateTimeDialogFragment.java +++ b/switchdatetime/src/main/java/com/kunzisoft/switchdatetime/SwitchDateTimeDialogFragment.java @@ -14,9 +14,14 @@ import ohos.agp.colors.RgbColor; import ohos.agp.components.*; import ohos.agp.components.element.ShapeElement; import ohos.agp.utils.Color; +import ohos.agp.utils.LayoutAlignment; import ohos.agp.window.dialog.CommonDialog; +import ohos.agp.window.service.Display; +import ohos.agp.window.service.DisplayManager; import ohos.app.Context; +import ohos.data.DatabaseHelper; +import ohos.data.preferences.Preferences; import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; import org.greenrobot.eventbus.ThreadMode; @@ -34,6 +39,8 @@ public class SwitchDateTimeDialogFragment extends CommonDialog { private static final String STATE_CURRENT_POSITION = "STATE_CURRENT_POSITION"; private static final int UNDEFINED_POSITION = -1; + private static boolean isOrientation; + private final Preferences mTimeDataSave; private Calendar dateTimeCalendar = Calendar.getInstance(); private Calendar minimumDateTime = new GregorianCalendar(1970, 1, 1); private Calendar maximumDateTime = new GregorianCalendar(2200, 1, 1); @@ -85,6 +92,12 @@ public class SwitchDateTimeDialogFragment extends CommonDialog { private SwitchDateTimeDialogFragment(Context context) { super(context); + + // 获取保存的手机横竖屏情况(true - 竖屏;false - 横屏) + DatabaseHelper databaseHelper = new DatabaseHelper(mContext); + Preferences orientation = databaseHelper.getPreferences("ori_pref"); + mTimeDataSave = databaseHelper.getPreferences("time_pref"); + isOrientation = orientation.getBoolean("orientation", true); } /** @@ -132,6 +145,9 @@ public class SwitchDateTimeDialogFragment extends CommonDialog { EventBus.getDefault().register(this); dateTimeCalendar.setTimeZone(timeZone); + Display display = DisplayManager.getInstance().getDefaultDisplay(mContext).get(); + System.out.println("-->>onCreate.width:"+display.getAttributes().width+"--height:"+display.getAttributes().height); + // Throw exception if default select date isn't between minimumDateTime and maximumDateTime if (dateTimeCalendar.before(minimumDateTime) || dateTimeCalendar.after(maximumDateTime)) throw new RuntimeException("Default date " + dateTimeCalendar.getTime() + " must be between " @@ -139,7 +155,15 @@ public class SwitchDateTimeDialogFragment extends CommonDialog { LayoutScatter inflater = LayoutScatter.getInstance(mContext); - dateTimeLayout = inflater.parse(ResourceTable.Layout_dialog_switch_datetime_picker, + // 获取当前布局 + int xmlId; + System.out.println("-->>onCreate"+isOrientation); + if (isOrientation) { + xmlId = ResourceTable.Layout_dialog_switch_datetime_picker; + } else { + xmlId = ResourceTable.Layout_dialog_switch_datetime_picker_land; + } + dateTimeLayout = inflater.parse(xmlId, (ComponentContainer) ((Ability) mContext).findComponentById(ResourceTable.Id_datetime_picker), true); @@ -319,7 +343,13 @@ public class SwitchDateTimeDialogFragment extends CommonDialog { Button btNegative = (Button) dateTimeLayout.findComponentById(ResourceTable.Id_btNegative); Button btNeutral = (Button) dateTimeLayout.findComponentById(ResourceTable.Id_btNeutral); setContentCustomComponent(dateTimeLayout); - setSize(1020, 2280); + if (isOrientation){ + setSize(1020, 2280); + } else { + setSize(1680, 1020); + setAlignment(LayoutAlignment.CENTER); + } + btPositive.setClickedListener(new Component.ClickedListener() { @Override public void onClick(Component component) { @@ -532,6 +562,15 @@ public class SwitchDateTimeDialogFragment extends CommonDialog { super.onDestroy(); EventBus.getDefault().unregister(this); startAtPosition = UNDEFINED_POSITION; + + if (mTimeDataSave != null){ + System.out.println("-->>onDestroy = "+dateTimeCalendar.get(Calendar.MONTH)); + mTimeDataSave.putInt("year",dateTimeCalendar.get(Calendar.YEAR)); + mTimeDataSave.putInt("month",dateTimeCalendar.get(Calendar.MONTH)); + mTimeDataSave.putInt("day",dateTimeCalendar.get(Calendar.DAY_OF_MONTH)); + mTimeDataSave.putInt("hour",dateTimeCalendar.get(Calendar.HOUR_OF_DAY)); + mTimeDataSave.putInt("minute",dateTimeCalendar.get(Calendar.MINUTE)); + } } /** @@ -713,6 +752,13 @@ public class SwitchDateTimeDialogFragment extends CommonDialog { */ public void setDefaultDateTime(Date date) { this.dateTimeCalendar.setTime(date); + if (mTimeDataSave != null){ + mTimeDataSave.putInt("year",dateTimeCalendar.get(Calendar.YEAR)); + mTimeDataSave.putInt("month",dateTimeCalendar.get(Calendar.MONTH)); + mTimeDataSave.putInt("day",dateTimeCalendar.get(Calendar.DAY_OF_MONTH)); + mTimeDataSave.putInt("hour",dateTimeCalendar.get(Calendar.HOUR_OF_DAY)); + mTimeDataSave.putInt("minute",dateTimeCalendar.get(Calendar.MINUTE)); + } } /** diff --git a/switchdatetime/src/main/java/com/kunzisoft/switchdatetime/provider/CalendarProvider.java b/switchdatetime/src/main/java/com/kunzisoft/switchdatetime/provider/CalendarProvider.java index c7f23dd..00282ee 100644 --- a/switchdatetime/src/main/java/com/kunzisoft/switchdatetime/provider/CalendarProvider.java +++ b/switchdatetime/src/main/java/com/kunzisoft/switchdatetime/provider/CalendarProvider.java @@ -24,6 +24,8 @@ import ohos.agp.components.*; import ohos.agp.utils.Color; import ohos.app.Context; +import ohos.data.DatabaseHelper; +import ohos.data.preferences.Preferences; import org.greenrobot.eventbus.EventBus; @@ -47,6 +49,7 @@ public class CalendarProvider extends BaseItemProvider { private DependentLayout lastview = null; private boolean isCk = true; private boolean isCurrentMonth; + private boolean isOrientation; /** * 构造方法 @@ -64,6 +67,13 @@ public class CalendarProvider extends BaseItemProvider { int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK); firstWeekOffset = Calendar.SATURDAY - dayOfWeek + 1; offset = firstWeekOffset - 7; + +// System.out.println("-->>CalendarProvider."+original_year+"--"+original_month+"--"+original_day); + + // 获取保存的手机横竖屏情况(true - 竖屏;false - 横屏) + DatabaseHelper databaseHelper = new DatabaseHelper(context); + Preferences orientation = databaseHelper.getPreferences("ori_pref"); + isOrientation = orientation.getBoolean("orientation", true); } @Override @@ -85,8 +95,15 @@ public class CalendarProvider extends BaseItemProvider { public Component getComponent(int position, Component componentP, ComponentContainer componentContainer) { Component component = componentP; if (component == null) { + // 获取当前布局 + int xmlId; + if (isOrientation) { + xmlId = ResourceTable.Layout_calendar_item_layout; + } else { + xmlId = ResourceTable.Layout_calendar_item_layout_land; + } component = LayoutScatter.getInstance(context) - .parse(ResourceTable.Layout_calendar_item_layout, null, false); + .parse(xmlId, null, false); viewHolder = new ViewHolder(); component.setTag(viewHolder); } else { diff --git a/switchdatetime/src/main/resources/base/layout/calendar_item_layout_land.xml b/switchdatetime/src/main/resources/base/layout/calendar_item_layout_land.xml new file mode 100644 index 0000000..1621666 --- /dev/null +++ b/switchdatetime/src/main/resources/base/layout/calendar_item_layout_land.xml @@ -0,0 +1,32 @@ + + + + + + + + + + \ No newline at end of file diff --git a/switchdatetime/src/main/resources/base/layout/dialog_switch_datetime_picker_land.xml b/switchdatetime/src/main/resources/base/layout/dialog_switch_datetime_picker_land.xml new file mode 100644 index 0000000..4c7b69b --- /dev/null +++ b/switchdatetime/src/main/resources/base/layout/dialog_switch_datetime_picker_land.xml @@ -0,0 +1,300 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +