按键返回键配置,设置视图的返回键无效
author罗正yun <1732036298@qq.com>
Sat, 20 Jan 2024 03:24:18 +0000 (11:24 +0800)
committer罗正yun <1732036298@qq.com>
Sat, 20 Jan 2024 03:24:18 +0000 (11:24 +0800)
code/sdk/application/wearable/nativeapp/nativeui/compass/include/MainCompassPresenter.h
code/sdk/application/wearable/nativeapp/nativeui/compass/src/MainCompassPresenter.cpp
code/sdk/application/wearable/nativeapp/nativeui/compass/src/MainCompassView.cpp
code/sdk/application/wearable/nativeapp/nativeui/settings/include/SettingPresenter.h
code/sdk/application/wearable/nativeapp/nativeui/settings/src/SettingPresenter.cpp
code/sdk/application/wearable/nativeapp/nativeui/settings/src/SettingView.cpp
code/sdk/application/wearable/nativeapp/nativeui/weather/include/MainWeatherPresenter.h
code/sdk/application/wearable/nativeapp/nativeui/weather/include/MainWeatherView.h
code/sdk/application/wearable/nativeapp/nativeui/weather/src/MainWeatherPresenter.cpp
code/sdk/application/wearable/nativeapp/nativeui/weather/src/MainWeatherView.cpp
code/sdk/application/wearable/nativeapp/nativeui/weather/src/WeatherView.cpp

index 30580af..b359762 100755 (executable)
 #include "CompassPresenter.h"
 #include "CompassModel.h"
 #include "CompassCalibrationView.h"
+#include "KeyInputListener.h"
 
 namespace OHOS {
 class CompassView;
-class MainCompassPresenter : public Presenter<CompassView>, public CompassPresenter,
+class MainCompassPresenter : public Presenter<CompassView>, public CompassPresenter, public RootView::OnKeyActListener,
     public ModelListenerSample, public UIView::OnDragListener {
 public:
     MainCompassPresenter();
@@ -32,6 +33,7 @@ public:
 
     static MainCompassPresenter *GetInstance(void);
     bool OnDrag(UIView& view, const DragEvent& event) override;
+    bool OnKeyAct(UIView &view, const KeyEvent &event) override; // 增加按键事件
     virtual void Notify() override;
 };
 }
index 11787e5..0e6d57d 100755 (executable)
@@ -8,7 +8,7 @@
 #include "MainCompassPresenter.h"
 #include "MainCompassView.h"
 #include "wearable_log.h"
-
+#include "common/key_code.h"
 namespace OHOS {
 static MainCompassPresenter *g_pMainView = nullptr;
 
@@ -48,6 +48,19 @@ bool MainCompassPresenter::OnDrag(UIView& view, const DragEvent& event)
     return true;
 }
 
+// 增加按键事件
+bool MainCompassPresenter::OnKeyAct(UIView &view, const KeyEvent &event)
+{
+    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MainCompassPresenter::OnKeyAct");
+    uint16 keyID = event.GetKeyId();
+    //如果是power键就返回上一级
+    if (keyID == static_cast<uint16_t>(ZliteKeyCode::ZLITE_KEY_POWER))
+    {
+        uint16_t preSlice = NativeAbility::GetInstance().GetPreSliceId();
+        NativeAbility::GetInstance().ChangeSlice(preSlice);
+    }
+    return true;
+}
 
 void MainCompassPresenter::Notify()
 {
index 9e76280..e240a47 100755 (executable)
@@ -106,6 +106,10 @@ void MainCompassView::OnStart()
         compassCalibrationView->SetVisible(false);
     }
     CompassModel::GetInstance()->OpenCompassSensor();
+
+    // 增加按键监听
+    RootView::OnKeyActListener *keyactListener = (RootView::OnKeyActListener *)OHOS::MainCompassPresenter::GetInstance();
+    RootView::GetInstance()->SetOnKeyActListener(keyactListener);
 }
 
 void MainCompassView::OnSetUpView()
index ee7b196..c14e239 100755 (executable)
@@ -9,6 +9,7 @@
 #include "SettingModel.h"
 #include "SettingPresenter.h"
 #include "RebootModel.h"
+#include "common/key_code.h"
 namespace OHOS
 {
 
@@ -56,26 +57,33 @@ namespace OHOS
             (event.GetDeltaX() > X_DRAG_OFFSET) && (event.GetDeltaX() > (DOUBLES * MATH_ABS(event.GetDeltaY()))))
         {
             WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SettingPresenter::OnDrag ChangeSlice(VIEW_APPLIST)");
-            NativeAbility::GetInstance().ChangeSlice(VIEW_APPLIST);
+            /*
+               GetPreSliceId作用:是从已存储的切片中获取上一个切片的ID,并且在切片数小于2的情况下返回一个无效的切片ID。
+            */
+            uint16_t preSlice = NativeAbility::GetInstance().GetPreSliceId();
+            if(preSlice == VIEW_APPLIST){
+                NativeAbility::GetInstance().ChangeSlice(preSlice);
+            }
+            else 
+            {
+                NativeAbility::GetInstance().ChangeSlice(VIEW_MAIN_SAMPLE);
+            }
+
         }
         return false;
     }
     // 增加按键事件
     bool SettingPresenter::OnKeyAct(UIView &view, const KeyEvent &event)
     {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SettingPresenter::OnKeyAct");
         uint16 keyID = event.GetKeyId();
-        WEARABLE_LOGD("", "into key! keyID %u\n", keyID);
-#if 0
+        printf("%d %s %d\n",keyID,__FUNCTION__,__LINE__);
                //如果是power键就返回上一级
                if (keyID == static_cast<uint16_t>(ZliteKeyCode::ZLITE_KEY_POWER))
                {
                        uint16_t preSlice = NativeAbility::GetInstance().GetPreSliceId();
-                       NativeAbility::GetInstance().ChangeSlice(VIEW_APPLIST);
+                       NativeAbility::GetInstance().ChangeSlice(preSlice);
                }
-#endif
-        // 目前只有一个按键。直接切换
-        uint16_t preSlice = NativeAbility::GetInstance().GetPreSliceId();
-        NativeAbility::GetInstance().ChangeSlice(preSlice);
         return true;
     }
 
index 922b31d..6f5ca5c 100755 (executable)
@@ -138,6 +138,7 @@ namespace OHOS
         scrollView->Add(title);
         scrollView->Add(contentList);
         RootView::GetInstance()->Add(scrollView);
+       
         contentList->SetAdapter(listAdapter);
 
         Draw();
@@ -155,12 +156,6 @@ namespace OHOS
     {
         WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SettingView::OnStop");
         View<SettingPresenter>::OnStop();
-        if (container_ != nullptr)
-        {
-            container_->RemoveAll();
-            delete container_;
-            container_ = nullptr;
-        }
         RootView::GetInstance()->ClearOnKeyActListener();
         RootView::GetInstance()->RemoveAll();
         return;
index 70bbd4e..0ad0ca0 100644 (file)
@@ -3,14 +3,14 @@
 \r
 #include "Presenter.h"\r
 #include "MainWeatherView.h"\r
-\r
+#include "KeyInputListener.h"\r
 /*主天气视图*/\r
 namespace OHOS\r
 {\r
     class MainWeatherView;\r
-\r
     class MainWeatherPresenter : public Presenter<MainWeatherView>,\r
                                  public UIView::OnClickListener,\r
+                                 public RootView::OnKeyActListener,\r
                                  public UIView::OnDragListener\r
     {\r
     public:\r
@@ -28,6 +28,7 @@ namespace OHOS
         // 因为继承了OnClickListener,所以有OnClick属性,至于参数,原函数也这样直接继承;\r
         bool OnClick(UIView &view, const ClickEvent &event) override;\r
         bool OnDrag(UIView &view, const DragEvent &event) override;\r
+        bool OnKeyAct(UIView &view, const KeyEvent &event) override; // 增加按键事件\r
     };\r
 } // namespace OHOS\r
 \r
index 37bd305..15b8016 100644 (file)
@@ -55,7 +55,7 @@ namespace OHOS
         UILabel *label1_ = nullptr;\r
         UILabel *label2_ = nullptr;\r
         UIImageView *image1_ = nullptr;\r
-        UILabel *label3_ = nullptr;\r
+        UILabel *showWeatherDescriptionLabel = nullptr;\r
         UILabel *label4_ = nullptr;\r
         UILabel *label5_ = nullptr;\r
         UIImageAnimatorView *imageAnimator1_ = nullptr;\r
index d065faf..6acebea 100644 (file)
@@ -1,7 +1,7 @@
 #include "AppViewIDs.h"\r
 #include "NativeAbility.h"\r
 #include "weather/include/MainWeatherPresenter.h"\r
-\r
+#include "common/key_code.h"\r
 namespace OHOS\r
 {\r
 \r
@@ -58,11 +58,11 @@ namespace OHOS
             NativeAbility::GetInstance().ChangeSlice(VIEW_APPLIST);\r
             return true;\r
         }\r
-        else if (event.GetDragDirection() == DragEvent::DIRECTION_BOTTOM_TO_TOP)\r
-        {\r
-            NativeAbility::GetInstance().ChangeSlice(VIEW_WEATHER_REPORT); // 主天气界面从下往上滑进入气象报告界面\r
-            return true;\r
-        }\r
+        // else if (event.GetDragDirection() == DragEvent::DIRECTION_BOTTOM_TO_TOP)\r
+        // {\r
+        //     NativeAbility::GetInstance().ChangeSlice(VIEW_WEATHER_REPORT); // 主天气界面从下往上滑进入气象报告界面\r
+        //     return true;\r
+        // }\r
         return false;\r
     }\r
 \r
@@ -73,4 +73,18 @@ namespace OHOS
         // if (strcmp(view.GetViewId(), 控件ID) == 0)\r
         return true;\r
     }\r
+\r
+    // 增加按键事件\r
+    bool MainWeatherPresenter::OnKeyAct(UIView &view, const KeyEvent &event)\r
+    {\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SettingPresenter::OnKeyAct");\r
+        uint16 keyID = event.GetKeyId();\r
+               //如果是power键就返回上一级\r
+               if (keyID == static_cast<uint16_t>(ZliteKeyCode::ZLITE_KEY_POWER))\r
+               {\r
+                       uint16_t preSlice = NativeAbility::GetInstance().GetPreSliceId();\r
+                       NativeAbility::GetInstance().ChangeSlice(preSlice);\r
+               }\r
+        return true;\r
+    }\r
 }
\ No newline at end of file
index bf37ce3..f7890a8 100644 (file)
@@ -151,8 +151,21 @@ namespace OHOS
         label2_ = InitLabel(249, 126, Temperature.c_str(), "label2", 100, 125);\r
         scrollView1_->Add(label2_);\r
         /* -------------------------------------------------------------------------- */\r
-        label3_ = InitLabel(111, 264, WeatherDescription.c_str(), "label3", 35, 41);\r
-        scrollView1_->Add(label3_);\r
+        showWeatherDescriptionLabel = new UILabel();\r
+        if (showWeatherDescriptionLabel == nullptr)\r
+        {\r
+            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "WeatherView::new showWeatherDescriptionLabel fail!");\r
+            return ;\r
+        }\r
+        showWeatherDescriptionLabel->SetPosition(83, 264,300,40);\r
+        showWeatherDescriptionLabel->SetViewId("showWeatherDescriptionLabel");\r
+        showWeatherDescriptionLabel->SetStyle(STYLE_TEXT_FONT, 35);\r
+        showWeatherDescriptionLabel->SetStyle(STYLE_LINE_HEIGHT, 41);\r
+        showWeatherDescriptionLabel->SetText(WeatherDescription.c_str());\r
+        showWeatherDescriptionLabel->SetLineBreakMode(UILabel::LINE_BREAK_WRAP);\r
+        showWeatherDescriptionLabel->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
+        showWeatherDescriptionLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 35);\r
+        scrollView1_->Add(showWeatherDescriptionLabel);\r
         /* -------------------------------------------------------------------------- */\r
         label4_ = InitLabel(155, 330, WeatherArea.c_str(), "label4", 26, 30);\r
         label4_->SetTextColor(Color::GetColorFromRGBA(0x99, 0x99, 0x99, 0xff));\r
@@ -205,10 +218,10 @@ namespace OHOS
             delete image1_;\r
             image1_ = nullptr;\r
         }\r
-        if (label3_ != nullptr)\r
+        if (showWeatherDescriptionLabel != nullptr)\r
         {\r
-            delete label3_;\r
-            label3_ = nullptr;\r
+            delete showWeatherDescriptionLabel;\r
+            showWeatherDescriptionLabel = nullptr;\r
         }\r
         if (label4_ != nullptr)\r
         {\r
@@ -260,6 +273,9 @@ namespace OHOS
         }\r
         PreLoad();\r
         RootView::GetInstance()->Add(container_);\r
+        // 增加按键监听\r
+        RootView::OnKeyActListener *keyactListener = (RootView::OnKeyActListener *)OHOS::MainWeatherPresenter::GetInstance();\r
+        RootView::GetInstance()->SetOnKeyActListener(keyactListener);\r
     }\r
 \r
     void MainWeatherView::OnSetUpView()\r
@@ -277,8 +293,8 @@ namespace OHOS
 \r
     void MainWeatherView::OnStop()\r
     {\r
-\r
         View<MainWeatherPresenter>::OnStop();\r
+        RootView::GetInstance()->ClearOnKeyActListener();\r
         RootView::GetInstance()->RemoveAll();\r
         return;\r
     }\r
index 273ba54..12922aa 100644 (file)
@@ -179,7 +179,7 @@ namespace OHOS
             return false;
         }
         /* -------------------------------------------------------------------------- */
-        UILabel *showWeatherDescriptionLabel = new UILabel();
+        showWeatherDescriptionLabel = new UILabel();
         showWeatherDescriptionLabel->SetPosition(83, 264,300,40);
         showWeatherDescriptionLabel->SetViewId("showWeatherDescriptionLabel");
         showWeatherDescriptionLabel->SetStyle(STYLE_TEXT_FONT, 35);