diff --git a/README.md b/README.md index 5da00a4415babf47f3c3fc94543c3038ce1be690..23701cf2d3d4338defca6378ab5d11a6499370a0 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/entry/src/main/config.json b/entry/src/main/config.json index 1d555f0867c3dc9bc6e9bc323eff773772004676..7f7434e5980726d6bb7417acc4e5eb93c697a891 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 0d651ef0ed3f49aa7f024b28e4c2e4d0ffbe841e..60a1ad9b3b6d65c833905310c9096634b25b47e2 100644 --- a/entry/src/main/java/com/kunzisoft/switchdatetimesample/slice/MainAbilitySlice.java +++ b/entry/src/main/java/com/kunzisoft/switchdatetimesample/slice/MainAbilitySlice.java @@ -2,14 +2,18 @@ package com.kunzisoft.switchdatetimesample.slice; import com.kunzisoft.switchdatetime.SwitchDateTimeDialogFragment; 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 +27,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 +84,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 +120,37 @@ public class MainAbilitySlice extends AbilitySlice { public void onForeground(Intent intent) { super.onForeground(intent); } + + @Override + protected void onOrientationChanged(AbilityInfo.DisplayOrientation displayOrientation) { + super.onOrientationChanged(displayOrientation); + System.out.println("-->>onOrientationChanged = " + displayOrientation); + + if (AbilityInfo.DisplayOrientation.LANDSCAPE == displayOrientation) { + mOrientation.putBoolean("orientation", false); + } else if (AbilityInfo.DisplayOrientation.PORTRAIT == displayOrientation) { + mOrientation.putBoolean("orientation", true); + } + + boolean s = false; + if (dateTimeFragment.isShowing()) { + dateTimeFragment.destroy(); + s = true; + } + + // 刷新ability + onStart(null); + + if (s) { + // 重新show dialog + 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/MyApplication.java b/switchdatetime/src/main/java/com/kunzisoft/switchdatetime/MyApplication.java index 391462286257fec5403945c61dcd8d00549b0df1..2ae846f5fd4d23edad4211b1df26db25816583e2 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;
diff --git a/switchdatetime/src/main/java/com/kunzisoft/switchdatetime/SwitchDateTimeDialogFragment.java b/switchdatetime/src/main/java/com/kunzisoft/switchdatetime/SwitchDateTimeDialogFragment.java
index ebba0f749977d08e441116d4cf4381809ae9faa9..6f409c5ac5a9a049f17b2c79d2650c608b99ab4d 100644
--- a/switchdatetime/src/main/java/com/kunzisoft/switchdatetime/SwitchDateTimeDialogFragment.java
+++ b/switchdatetime/src/main/java/com/kunzisoft/switchdatetime/SwitchDateTimeDialogFragment.java
@@ -6,7 +6,6 @@ import com.kunzisoft.switchdatetime.event.MessageEvent;
import com.kunzisoft.switchdatetime.provider.PageProvider;
import com.kunzisoft.switchdatetime.time.RadialPickerLayout;
import com.kunzisoft.switchdatetime.time.SwitchTimePicker;
-
import ohos.aafwk.ability.Ability;
import ohos.agp.animation.Animator;
import ohos.agp.animation.AnimatorProperty;
@@ -14,9 +13,13 @@ 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 +37,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 +90,15 @@ 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);
+
+ startAtPosition = mTimeDataSave.getInt("positionView", UNDEFINED_POSITION);
+ System.out.println("-->>SwitchDateTimeDialogFragment = "+startAtPosition);
}
/**
@@ -132,6 +146,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 +156,14 @@ public class SwitchDateTimeDialogFragment extends CommonDialog {
LayoutScatter inflater = LayoutScatter.getInstance(mContext);
- dateTimeLayout = inflater.parse(ResourceTable.Layout_dialog_switch_datetime_picker,
+ // 获取当前布局
+ int xmlId;
+ 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);
@@ -308,7 +332,8 @@ public class SwitchDateTimeDialogFragment extends CommonDialog {
public void onYearSelected(Component view, int yearPicker) {
dateTimeCalendar.set(Calendar.YEAR, yearPicker);
yearHeaderValues.setText(yearSimpleDate.format(dateTimeCalendar.getTime()));
-
+ original_year = yearPicker - 1;
+ setMonth();
}
});
//BuildDatePicker
@@ -319,7 +344,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) {
@@ -350,6 +381,13 @@ public class SwitchDateTimeDialogFragment extends CommonDialog {
}
});
+
+ System.out.println("-->>startAtPosition = "+startAtPosition);
+ viewSwitcher.setCurrentIndex(startAtPosition);
+ if (viewSwitcher.getCurrentIndex() == 0) {
+ ((RadialPickerLayout) ((DirectionalLayout) viewSwitcher.getCurrentComponent()).getComponentAt(0)).refresh();
+ }
+
}
private void CalendarPicker() {
@@ -405,6 +443,7 @@ public class SwitchDateTimeDialogFragment extends CommonDialog {
String mon = "";
int year = original_year;
int month = original_month + pageSlider.getCurrentPage();
+ System.out.println("-->>setMonth = " + original_month + "--" + pageSlider.getCurrentPage());
if (month > 11) {
int times = month / 12;
year = year + times;
@@ -532,6 +571,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 +761,15 @@ 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));
+ }
+ original_month = dateTimeCalendar.get(Calendar.MONTH);
+ original_year = dateTimeCalendar.get(Calendar.YEAR) - 1;
}
/**
@@ -897,6 +954,9 @@ public class SwitchDateTimeDialogFragment extends CommonDialog {
}
startAtPosition = positionView;
+ if (mTimeDataSave != null) {
+ mTimeDataSave.putInt("positionView", startAtPosition);
+ }
}
}
}
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 c7f23dd90220b108eeec2b85f7dd2dbcc7da8285..00282ee3cf92df7e1d04b4c7f408604d015ffaa6 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 0000000000000000000000000000000000000000..1621666731925f6aae38721a2d073e7719772487
--- /dev/null
+++ b/switchdatetime/src/main/resources/base/layout/calendar_item_layout_land.xml
@@ -0,0 +1,32 @@
+
+