From 85e989454fcc64a3cd99eaf659e00c4a2c10b534 Mon Sep 17 00:00:00 2001 From: Linjiajia <319408893@qq.com> Date: 星期五, 17 三月 2023 16:00:59 +0800 Subject: [PATCH] 主页 --- app_base/src/main/java/com/android/app_base/base/view/BaseActivity.java | 180 ++++++++++++++++++++++++++++++++++++++++++++++++++++++------ 1 files changed, 162 insertions(+), 18 deletions(-) diff --git a/app_base/src/main/java/com/android/app_base/base/view/BaseActivity.java b/app_base/src/main/java/com/android/app_base/base/view/BaseActivity.java index be3f169..2fb56c9 100644 --- a/app_base/src/main/java/com/android/app_base/base/view/BaseActivity.java +++ b/app_base/src/main/java/com/android/app_base/base/view/BaseActivity.java @@ -1,18 +1,29 @@ package com.android.app_base.base.view; +import android.app.Activity; +import android.content.Context; +import android.content.Intent; import android.os.Bundle; +import android.view.View; +import android.view.ViewGroup; +import android.view.Window; +import android.view.inputmethod.InputMethodManager; +import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; import androidx.databinding.DataBindingUtil; import androidx.databinding.ViewDataBinding; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; -import androidx.lifecycle.ViewModelStoreOwner; +import com.android.app_base.action.TitleBarAction; import com.android.app_base.base.viewmodel.BaseViewModel; import com.android.app_base.base.StateViewEnum; +import com.gyf.immersionbar.ImmersionBar; +import com.hjq.bar.OnTitleBarListener; +import com.hjq.bar.TitleBar; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; @@ -20,19 +31,31 @@ /** * Activity鍩虹被,鎵�鏈夌殑 Activity 閮借缁ф壙姝ょ被 */ -public abstract class BaseActivity<V extends ViewDataBinding,VM extends BaseViewModel> extends AppCompatActivity { +public abstract class BaseActivity<V extends ViewDataBinding,VM extends BaseViewModel> extends AppCompatActivity implements TitleBarAction{ protected V binding; protected VM viewModel; private int viewModelId; + /** + * 鏍囬鏍忓璞� + */ + private TitleBar mTitleBar; + /** + * 鐘舵�佹爮娌夋蹈 + */ + private ImmersionBar mImmersionBar; + + + @Override + protected void onResume() { + super.onResume(); + } @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); - //缁戝畾 ViewDataBinding 鍜� ViewModel - initViewDataBindingAndViewModel(); - //鍒濆鍖栫姸鎬佽鍥� - initStateView(); + //Layout鍒濆鍖� + initLayout(); //椤甸潰鍙傛暟鍒濆鍖栨柟娉� initParam(); //椤甸潰view鍒濆鍖栨柟娉� @@ -54,28 +77,44 @@ } } + /** + * 鍒濆鍖栧竷灞� + */ + protected void initLayout(){ + //缁戝畾 ViewDataBinding 鍜� ViewModel + initViewDataBindingAndViewModel(); + //鍒濆鍖栫姸鎬佽鍥� + initStateView(); + //鍒濆鍖栨矇娴稿紡鐘舵�佹爮鍜� titleBar + initStatusBar(); + } /** * ViewDataBinding鍜� ViewModel鐨勮幏鍙栧強鐩稿叧缁戝畾 */ - private void initViewDataBindingAndViewModel() { - binding = DataBindingUtil.setContentView(this, getLayoutId()); + protected void initViewDataBindingAndViewModel() { + if (getLayoutId() > 0) { + binding = DataBindingUtil.setContentView(this, getLayoutId()); + initSoftKeyboard(); + } viewModelId = getVariableId(); viewModel = initViewModel(); - //鍏宠仈ViewModel - binding.setVariable(viewModelId, viewModel); - //鏀寔LiveData缁戝畾xml锛屾暟鎹敼鍙橈紝UI鑷姩浼氭洿鏂� - binding.setLifecycleOwner(this); - //璁¬iewModel鎷ユ湁View鐨勭敓鍛藉懆鏈熸劅搴� - getLifecycle().addObserver(viewModel); - + if (binding != null){ + //鍏宠仈ViewModel + if (viewModelId > 0){ + binding.setVariable(viewModelId, viewModel); + } + //鏀寔LiveData缁戝畾xml锛屾暟鎹敼鍙橈紝UI鑷姩浼氭洿鏂� + binding.setLifecycleOwner(this); + //璁¬iewModel鎷ユ湁View鐨勭敓鍛藉懆鏈熸劅搴� + getLifecycle().addObserver(viewModel); + } } - /** * 鍒濆鍖朧iewModel * @return 杩斿洖涓�涓猇iewModel */ - private VM initViewModel() { + protected VM initViewModel() { Class<VM> vmClass; Type type = getClass().getGenericSuperclass(); if (type instanceof ParameterizedType){ @@ -90,7 +129,7 @@ /** * 瀵圭姸鎬佽鍥緇iveData杩涜瑙傚療鐩戝惉 */ - private void initStateView() { + protected void initStateView() { viewModel.getStateViewLiveData().observe(this, new Observer<StateViewEnum>() { @Override public void onChanged(StateViewEnum stateViewEnum) { @@ -142,6 +181,65 @@ } /** + * 鍒濆鍖栨矇娴稿紡鐘舵�佹爮 + */ + protected void initStatusBar(){ + if (isStatusBarImmersionEnabled()) { + getImmersionBarConfig().init(); + // 璁剧疆鏍囬鏍忔矇娴�() + if (getTitleBar() != null) { + ImmersionBar.setTitleBar(this, getTitleBar()); + getTitleBar().setOnTitleBarListener(this); + } + } + } + /** + * 鏄惁浣跨敤娌夋蹈寮忕姸鎬佹爮,鍙互瀛愮被閲嶅啓鎸囧畾 + */ + protected boolean isStatusBarImmersionEnabled() { + return true; + } + /** + * 鑾峰彇鐘舵�佹爮娌夋蹈鐨勯厤缃璞� + */ + @NonNull + public ImmersionBar getImmersionBarConfig() { + if (mImmersionBar == null) { + mImmersionBar = createStatusBarConfig(); + } + return mImmersionBar; + } + /** + * 鍒涘缓鐘舵�佹爮娌夋蹈鐨勯厤缃璞� + */ + @NonNull + protected ImmersionBar createStatusBarConfig() { + return ImmersionBar.with(this) + // 榛樿鐘舵�佹爮瀛椾綋棰滆壊涓洪粦鑹� + .statusBarDarkFont(isStatusBarDarkFont(),0.2f);//涓嶅啓榛樿涓轰寒鑹� + } + /** + * 鐘舵�佹爮瀛椾綋娣辫壊妯″紡 + */ + protected boolean isStatusBarDarkFont() { + return true; + } + @Override + @Nullable + public TitleBar getTitleBar() { + if (mTitleBar == null) { + mTitleBar = obtainTitleBar(findViewById(Window.ID_ANDROID_CONTENT)); + } + return mTitleBar; + } + + @Override + public void onLeftClick(TitleBar titleBar) { + TitleBarAction.super.onLeftClick(titleBar); + onBackPressed(); + } + + /** * 鑾峰彇鏍瑰竷灞�鐨刬d锛岀敱瀛愮被瀹炵幇杩斿洖 * @return layout鐨刬d */ @@ -174,4 +272,50 @@ */ public abstract void initLiveDataObserve(); + @Override + public void finish() { + hideSoftKeyboard(); + super.finish(); + } + + /** + * 闅愯棌杞敭鐩� + */ + protected void hideSoftKeyboard() { + // 闅愯棌杞敭鐩橈紝閬垮厤杞敭鐩樺紩鍙戠殑鍐呭瓨娉勯湶 + View view = getCurrentFocus(); + if (view != null) { + InputMethodManager manager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + if (manager != null && manager.isActive(view)) { + manager.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); + } + } + } + + /** + * 鍒濆鍖栬蒋閿洏 + */ + protected void initSoftKeyboard() { + // 鐐瑰嚮澶栭儴闅愯棌杞敭鐩橈紝鎻愬崌鐢ㄦ埛浣撻獙 + getContentView().setOnClickListener(v -> hideSoftKeyboard()); + } + + public ViewGroup getContentView() { + return findViewById(Window.ID_ANDROID_CONTENT); + } + + public Activity getSelfActivity() { + return this; + } + + /** + * 濡傛灉褰撳墠鐨� Activity锛坰ingleTop 鍚姩妯″紡锛� 琚鐢ㄦ椂浼氬洖璋� + */ + @Override + protected void onNewIntent(Intent intent) { + super.onNewIntent(intent); + // 璁剧疆涓哄綋鍓嶇殑 Intent锛岄伩鍏� Activity 琚潃姝诲悗閲嶅惎 Intent 杩樻槸鏈�鍘熷厛鐨勯偅涓� + setIntent(intent); + } + } -- Gitblit v1.9.1