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 @@
+
+