From ad52afc6bcdaad95583ef7c619bc8c5749e78d76 Mon Sep 17 00:00:00 2001
From: Linjiajia <319408893@qq.com>
Date: 星期六, 18 三月 2023 03:58:19 +0800
Subject: [PATCH] 功能fragment标题栏
---
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