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