diff --git a/CHANGELOG.md b/CHANGELOG.md index 62c8f7971a2d7aedb3d5e2dbe99146647f751db0..3e268df59117a1b486cb34e7a32f0309625846a1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,2 +1,6 @@ ## 0.0.1-SNAPSHOT -ohos第一个版本,完整实现了原库的全部api + +ohos第一个版本 + + * 实现了原库的大部分api + * ohos暂不支持设置最大高度 \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 60e88391f40bc5e2ffde509aa3b73bf08fe2b48c..0617c91b8090c894aee52604f9418da6c9f58b4f 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,7 +1,7 @@ apply plugin: 'com.huawei.ohos.hap' apply plugin: 'com.huawei.ohos.decctest' ohos { - compileSdkVersion 5 + compileSdkVersion 6 defaultConfig { compatibleSdkVersion 5 } diff --git a/app/src/main/java/com/tylersuehr/chipexample/slice/MainAbilitySlice.java b/app/src/main/java/com/tylersuehr/chipexample/slice/MainAbilitySlice.java index a43a609e98c19662dc325e3dc706b1528bffbac9..5ebc90f06c5cf9bbc09ad963d97a86e98c6ef063 100644 --- a/app/src/main/java/com/tylersuehr/chipexample/slice/MainAbilitySlice.java +++ b/app/src/main/java/com/tylersuehr/chipexample/slice/MainAbilitySlice.java @@ -17,6 +17,8 @@ package com.tylersuehr.chipexample.slice; import com.tylersuehr.chipexample.ResourceTable; import com.tylersuehr.chipexample.utils.KeyboardVisibilityEvent; +import com.tylersuehr.chipexample.utils.KeyboardVisibilityEventListener; +import com.tylersuehr.chipexample.utils.Unregistrar; import com.tylersuehr.chips.ChipDetailsView; import com.tylersuehr.chips.FlowLayout; import ohos.aafwk.ability.AbilitySlice; @@ -200,7 +202,7 @@ public class MainAbilitySlice extends AbilitySlice implements Component.ClickedL /** * 获取屏幕宽度 * - * @param context 上下文 + * @param context context * @return 屏幕宽度 */ public static int getDisplayWidthInPx(Context context) { diff --git a/app/src/main/java/com/tylersuehr/chipexample/utils/KeyboardVisibilityEvent.java b/app/src/main/java/com/tylersuehr/chipexample/utils/KeyboardVisibilityEvent.java index af6db8d327c0ce96753a0c45f7ee0b3a609c4221..183088328ceb46ce2ac72206e93827880807056a 100644 --- a/app/src/main/java/com/tylersuehr/chipexample/utils/KeyboardVisibilityEvent.java +++ b/app/src/main/java/com/tylersuehr/chipexample/utils/KeyboardVisibilityEvent.java @@ -15,8 +15,13 @@ package com.tylersuehr.chipexample.utils; +import ohos.aafwk.ability.AbilitySlice; import ohos.aafwk.ability.LifecycleObserver; import ohos.agp.components.Component; +import ohos.agp.utils.Point; +import ohos.agp.utils.Rect; +import ohos.agp.window.service.DisplayManager; +import ohos.app.Context; public class KeyboardVisibilityEvent { private static final double KEYBOARD_MIN_HEIGHT_RATIO = 0.15; @@ -31,8 +36,103 @@ public class KeyboardVisibilityEvent { return keyboardVisibilityEvent; } + /** + * Set keyboard visibility change event listener. + * This automatically remove registered event listener when the Activity is destroyed + * + * @param abilitySlice Activity + */ + public void setEventListener(AbilitySlice abilitySlice, KeyboardVisibilityEventListener listener) { + Unregistrar unregistrar = registerEventListener(abilitySlice, listener); + //需要生命周期的监听 ILifecycleObserver + mLifecycleObserver = new LifecycleObserver() { + @Override + public void onStop() { + super.onStop(); + abilitySlice.getLifecycle().removeObserver(this); + unregistrar.unregister(mRootView); + } + }; + abilitySlice.getLifecycle().addObserver(mLifecycleObserver); + } + + /** + * Set keyboard visibility change event listener. + * This automatically remove registered event listener when the Activity is destroyed + * + * @param abilitySlice Activity + */ + public Unregistrar registerEventListener( + AbilitySlice abilitySlice, + KeyboardVisibilityEventListener listener) { + if (abilitySlice == null) { + throw new NullPointerException("Parameter:AbilitySlice must not be null"); + } + if (listener == null) { + throw new NullPointerException("Parameter:listener must not be null"); + } + if (mRootView == null) { + throw new NullPointerException("mRootView:listener must not be null"); + } + + Component.LayoutRefreshedListener layoutListener = new Component.LayoutRefreshedListener() { + private boolean isWasOpened = false; + + @Override + public void onRefreshed(Component component) { + boolean isOpen = isKeyboardVisible(abilitySlice); + + if (isOpen != isWasOpened) { + // keyboard state has not changed + + isWasOpened = isOpen; + listener.onVisibilityChanged(isOpen); + } + } + }; + mRootView.setLayoutRefreshedListener(layoutListener); + return new SimpleUnregistrar(abilitySlice, layoutListener); + } + + /** + * Determine if keyboard is visible + * + * @param abilitySlice Activity + * @return Whether keyboard is visible or not + */ + public boolean isKeyboardVisible(AbilitySlice abilitySlice) { + Rect rect = new Rect(); + + mRootView.getSelfVisibleRect(rect); + + int[] location = mRootView.getLocationOnScreen(); + + int screenHeight = (int) getRealHeight(abilitySlice.getContext()); + int heightDiff = screenHeight - rect.getHeight() - location[1]; + + if (location[1] == 0) { + return false; + } else { + return heightDiff > screenHeight * KEYBOARD_MIN_HEIGHT_RATIO; + } + } + //获取根界面进行传入 public void setAbilitySliceRoot(Component RootView) { this.mRootView = RootView; } + + public Component getAbilitySliceRoot() { + if (mRootView == null) { + throw new NullPointerException("mRootView:listener must not be null"); + } else { + return mRootView; + } + } + + public static float getRealHeight(Context context) { + Point point = new Point(); + DisplayManager.getInstance().getDefaultDisplay(context).get().getRealSize(point); + return point.getPointY(); + } } diff --git a/build.gradle b/build.gradle index d3c9f1fef7ce4e18162867c20c11bfc65e1a8d28..a28641cf1d0eb8db571dd1ae7a377a3e81709733 100644 --- a/build.gradle +++ b/build.gradle @@ -2,7 +2,7 @@ apply plugin: 'com.huawei.ohos.app' ohos { - compileSdkVersion 5 + compileSdkVersion 6 defaultConfig { compatibleSdkVersion 5 } diff --git a/library/build.gradle b/library/build.gradle index e1c0b274a6c5cb35b197a177a17684addf760676..7e1e475c1296e7c6d200a45810598ddff583ee7f 100644 --- a/library/build.gradle +++ b/library/build.gradle @@ -1,8 +1,8 @@ apply plugin: 'com.huawei.ohos.library' ohos { - compileSdkVersion 5 + compileSdkVersion 6 defaultConfig { - compatibleSdkVersion 4 + compatibleSdkVersion 5 } buildTypes { release {