美文网首页
2021-09-09 自用的baseActivity

2021-09-09 自用的baseActivity

作者: fjasmin | 来源:发表于2021-09-09 18:25 被阅读0次
import android.content.res.Configuration;
import android.content.res.Resources;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.MenuItem;
import android.widget.TextView;

import androidx.annotation.Nullable;
import androidx.annotation.StringRes;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import androidx.viewbinding.ViewBinding;

import com.fjasmin.testapplication.R;
import com.lxj.xpopup.XPopup;
import com.lxj.xpopup.impl.LoadingPopupView;
import com.tbruyelle.rxpermissions3.RxPermissions;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.ParameterizedType;

import io.reactivex.rxjava3.disposables.CompositeDisposable;

public abstract class BaseActivity<T extends ViewBinding> extends AppCompatActivity implements Toolbar.OnMenuItemClickListener {
    private static final String TAG = BaseActivity.class.getName();

    protected Toolbar toolbar = null;
    protected TextView toolbarTitle = null;

    protected CompositeDisposable compositeDisposable = new CompositeDisposable();
    protected T viewBinding;

    protected RxPermissions rxPermissions;

    private LoadingPopupView panelOnDialog = null;

    protected boolean hasToolbar() {
        return true;
    }

    protected int navigationIcon() {
        return R.mipmap.icon_goback;
    }

    protected String getToolbarTitle() {
        return getString(R.string.app_name);
    }

    protected void onImmersionBar() {
        //ImmersionBar.with(this).statusBarColor(R.color.stylePrimaryColor).navigationBarColor(R.color.black).statusBarDarkFont(false).fitsSystemWindows(true).init();
    }

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        panelOnDialog = new XPopup
                .Builder(this)
                .isDarkTheme(false)
                .dismissOnBackPressed(false)
                .dismissOnTouchOutside(false)
                .asLoading("加载中");
        rxPermissions = new RxPermissions(this);

        ParameterizedType type = (ParameterizedType) getClass().getGenericSuperclass();

        Class cls = (Class) type.getActualTypeArguments()[0];
        try {
            Method inflate = cls.getDeclaredMethod("inflate", LayoutInflater.class);
            viewBinding = (T) inflate.invoke(null, getLayoutInflater());
            setContentView(viewBinding.getRoot());
        } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
            Log.e(TAG, e.toString());
        }
        if (hasToolbar()) {
            toolbar = findViewById(R.id.toolbar);
            toolbar.setOnMenuItemClickListener(this);

            toolbarTitle = findViewById(R.id.toolbar_title);
            toolbarTitle.setText(getToolbarTitle());
            setSupportActionBar(toolbar);

            if (getSupportActionBar() != null) {
                getSupportActionBar().setDisplayHomeAsUpEnabled(false);
                getSupportActionBar().setDisplayShowTitleEnabled(false);
            }

            toolbar.setNavigationOnClickListener(v -> onBackPressed());
            toolbar.setNavigationIcon(null);
            if (navigationIcon() > 0) {
                toolbar.setNavigationIcon(navigationIcon());
            }
        }

        onImmersionBar();

    }

    @Override
    public void finish() {
        super.finish();
        if (compositeDisposable != null){
            compositeDisposable.clear();
            compositeDisposable = null;
        }
    }

    @Override
    public void onConfigurationChanged( Configuration newConfig) {
        if (newConfig.fontScale != -1)
            getResources();
        super.onConfigurationChanged(newConfig);
    }

    @Override
    public Resources getResources() {
        Resources resources = super.getResources();
        if (resources.getConfiguration().fontScale != 1){
            Configuration newConfig = new Configuration();
            newConfig.setToDefaults();
            resources.updateConfiguration(newConfig,resources.getDisplayMetrics());
        }
        return resources;
    }

    @Override
    public boolean onMenuItemClick(MenuItem item) {
        return false;
    }

    public final void setToolbarTitle(String toolbarTitle) {
        if (this.toolbarTitle != null) {
            this.toolbarTitle.setText(toolbarTitle);
        }
    }

    public void setToolbarTitle(@StringRes int resId) {
        if (this.toolbarTitle != null){
            this.toolbarTitle.setText(resId);
        }
    }


    /**
     * 开启加载进度条
     *
     * @param msg 进图条文本
     */
    public void startLoadingDialog(String msg) {
        if(panelOnDialog != null && !panelOnDialog.isShow()) {
            panelOnDialog.show();
        }
    }

    /**
     * 开启加载进度条
     */
    public void startLoadingDialog() {
        if(panelOnDialog != null && !panelOnDialog.isShow()) {
            panelOnDialog.show();
        }
    }

    /**
     * 关闭加载进度条
     */
    public void stopLoadingDialog() {
        if(panelOnDialog != null) {
            panelOnDialog.dismiss();
        }
    }

    public void showToast(CharSequence text) {
        //ToastUtils.showShortToast(this, text);
    }

    public void showToast(@StringRes int resId) {
        //ToastUtils.showShortToast(this, getString(resId));
    }

    public void showLongToast(CharSequence text) {
        //ToastUtils.showLongToast(this, text);
    }
}

相关文章

网友评论

      本文标题:2021-09-09 自用的baseActivity

      本文链接:https://www.haomeiwen.com/subject/bzcwwltx.html