From 456d08024b15de9d642c16f6826ff139965d75a2 Mon Sep 17 00:00:00 2001 From: Quyunshuo Date: Sun, 11 Jul 2021 18:16:29 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0PopupWindow=E5=92=8CL?= =?UTF-8?q?ifecycleOwner=E6=89=A9=E5=B1=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../base/ktx/LifecycleOwnerKtx.kt | 27 +++++++++++++++++++ .../base/ktx/PopupWindowKtx.kt | 21 +++++++++++++++ 2 files changed, 48 insertions(+) create mode 100644 lib_base/src/main/java/com/quyunshuo/androidbaseframemvvm/base/ktx/LifecycleOwnerKtx.kt create mode 100644 lib_base/src/main/java/com/quyunshuo/androidbaseframemvvm/base/ktx/PopupWindowKtx.kt diff --git a/lib_base/src/main/java/com/quyunshuo/androidbaseframemvvm/base/ktx/LifecycleOwnerKtx.kt b/lib_base/src/main/java/com/quyunshuo/androidbaseframemvvm/base/ktx/LifecycleOwnerKtx.kt new file mode 100644 index 0000000..93a1bc0 --- /dev/null +++ b/lib_base/src/main/java/com/quyunshuo/androidbaseframemvvm/base/ktx/LifecycleOwnerKtx.kt @@ -0,0 +1,27 @@ +package com.quyunshuo.androidbaseframemvvm.base.ktx + +import androidx.lifecycle.LifecycleOwner +import androidx.lifecycle.LiveData + +/** + * 对LiveData订阅的简化封装 + * + * 使用示例 + * ``` + * override fun initObserve() { + * observe(mViewModel.stateViewLD, ::stateViewLivaDataHandler) + * } + * + * private fun stateViewLivaDataHandler(data: StateLayoutEnum) { + * ... + * } + * ``` + * + * @receiver LifecycleOwner + * @param liveData LiveData 需要进行订阅的LiveData + * @param action action: (t: T) -> Unit 处理订阅内容的方法 + * @return Unit + */ +fun LifecycleOwner.observe(liveData: LiveData, action: (t: T) -> Unit) { + liveData.observe(this, { it?.let { t -> action(t) } }) +} \ No newline at end of file diff --git a/lib_base/src/main/java/com/quyunshuo/androidbaseframemvvm/base/ktx/PopupWindowKtx.kt b/lib_base/src/main/java/com/quyunshuo/androidbaseframemvvm/base/ktx/PopupWindowKtx.kt new file mode 100644 index 0000000..e72385d --- /dev/null +++ b/lib_base/src/main/java/com/quyunshuo/androidbaseframemvvm/base/ktx/PopupWindowKtx.kt @@ -0,0 +1,21 @@ +package com.quyunshuo.androidbaseframemvvm.base.ktx + +import android.view.View +import android.view.ViewGroup +import android.widget.PopupWindow + +/** + * PopupWindow相关扩展 + * + * @author Qu Yunshuo + * @since 1/4/21 10:48 AM + */ + +/** + * 测量view宽高 + */ +fun PopupWindow.makeDropDownMeasureSpec(measureSpec: Int): Int { + val mode = + if (measureSpec == ViewGroup.LayoutParams.WRAP_CONTENT) View.MeasureSpec.UNSPECIFIED else View.MeasureSpec.EXACTLY + return View.MeasureSpec.makeMeasureSpec(View.MeasureSpec.getSize(measureSpec), mode) +} \ No newline at end of file