## 抽取BaseActivity解放你的titlebar ##

Android-一个项目的基类包含BaseActivityBaseFragment等 一个项目的基类,包含BaseActivity、BaseFragment等 立即下载

当项目过大的时候 往往需要多个Activity 为了避免每次重复写的title 我们将其抽取出来

  1. 需要的XML布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/base_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:clipToPadding="true"
    android:fitsSystemWindows="true"
    android:orientation="vertical" >

    <RelativeLayout
        android:id="@+id/base_titlebar"
        android:layout_width="match_parent"
        android:layout_height="50dp" >

        <ImageButton
            android:id="@+id/base_back_btn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:padding="10dp"
            android:background="@null"
            android:src="@mipmap/ic_launcher" />

        <TextView
            android:id="@+id/base_menu_btn"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_alignParentRight="true"
            android:padding="10dp"
            android:gravity="center"
            android:layout_centerVertical="true"
            android:background="@null"
            android:text="设置"
            android:textSize="16sp" />

        <TextView
            android:id="@+id/base_title_tv"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:gravity="center"
            android:text="标题"
            android:textColor="#ffffff"
            android:textSize="20sp" />
        <View android:layout_width="match_parent"
            android:layout_height="1dp"
            android:layout_alignParentBottom="true" />
    </RelativeLayout>

    <FrameLayout
        android:id="@+id/base_contentview"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1">
    </FrameLayout>

</LinearLayout>
  1. BaseActivity
public abstract class BaseActivity extends Activity{

    public ViewGroup contentView;
    private TextView rightBtn;
    private View leftBtn;
    private TextView titltTv;
    private View titlebar;
    @SuppressLint("InlinedApi")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_base);
        setTranslucentStatus();

        int titlebarResId = getTitlebarResId();
        if (titlebarResId!=0) {
            LinearLayout view=(LinearLayout) findViewById(R.id.base_view);
            view.removeViewAt(0);
            LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,50);
            ViewGroup titleView=(ViewGroup) View.inflate(this, titlebarResId, null);
            view.addView(titleView, 0,lp);
            view.setBackgroundDrawable(titleView.getBackground());
            titlebar=titleView;
        }else {
            titlebar=findViewById(R.id.base_titlebar);
            leftBtn = findViewById(R.id.base_back_btn);
            leftBtn.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {
                    onClickLeft();
                }
            });
            rightBtn = (TextView) findViewById(R.id.base_menu_btn);
            rightBtn.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {
                    onClickRight();
                }
            });
            titltTv=(TextView) findViewById(R.id.base_title_tv);
        }

        contentView=(ViewGroup) findViewById(R.id.base_contentview);
        contentView.addView(View.inflate(this, getContentView(), null));
        setRightBtnVisible(false);

    }

    @Override
    public void overridePendingTransition(int enterAnim, int exitAnim) {
        super.overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
    }

    /**
     * 设置状态栏背景状态
     */
    private void setTranslucentStatus()
    {
        //判断当前SDK版本号,如果是4.4以上,就是支持沉浸式状态栏的
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
            getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);

        }

    }

    /**
     * 点击左侧按钮
     * 默认是退出
     */
    protected void onClickLeft() {
        finish();
    }

    /**
     * 点击右侧按钮
     * 默认什么都不做
     */
    protected void onClickRight() {

    }

    /**
     * 设置左侧按钮显示与隐藏
     * @param visible
     */
    public void setLeftBtnVisible(Boolean visible) {
        if (leftBtn!=null) {
            if (visible) {
                leftBtn.setVisibility(View.VISIBLE);
            }else{
                leftBtn.setVisibility(View.GONE);
            }
        }

    }

    /**
     * 设置右侧按钮显示与隐藏
     * @param visible
     */
    public void setRightBtnVisible(Boolean visible) {
        if (rightBtn!=null) {
            if (visible) {
                rightBtn.setVisibility(View.VISIBLE);
            }else{
                rightBtn.setVisibility(View.GONE);
            }
        }

    }

    /**
     * 获取自定义标题栏
     * 如果子类复写并返回不等于0的布局文件,将会覆盖默认标题
     * 返回0 将会采用默认标题
     * @return
     */
    protected int getTitlebarResId() {
        return 0;
    }

    /**
     * 设置中间标题
     * @param title
     */
    public void setTitle(String title){
        if (titltTv!=null) {
            if (titltTv!=null) {
                titltTv.setText(title);
            }
        }
    }


    /**
     * 设置右边你按钮文字属性
     * @param title
     */
    public void setRtTitle(String title){
        if (rightBtn!=null) {
            rightBtn.setText(title);
        }
    }

    public View getTitleBar(){

        return titlebar;
    }


    /**
     * 获取中间内容显示区
     * @return
     */
    protected abstract int getContentView();

}

3.简单的应用

    public class MainActivity extends BaseActivity {  

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

            setTitle("主页");  
            setRtTitle("设置");  
            setRightBtnVisible(true);  
        }  
        @Override  
        protected int getContentView() {  
            return R.layout.activity_main;//任意非空布局  
        }  


        @Override  
        protected void onClickRight() {  
            Toast.makeText(this, "设置", 0).show();;  
        }  
    }  
  1. 效果如下这里写图片描述
BaseActivity自定义TitleBar 立即下载

相关推荐

Android中BaseActivity自定义标题栏

主要介绍了Android中BaseActivity自定义标题栏,非常实用,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

GitHub 在Android开发上的基本应用

在安卓开发过程中,免不了造轮子环节。造轮子虽然比较锻炼自身技术,但费时不谈,开发质量有待商榷。如果用别人已经封装好的控件或者说开源代码,就可以减少开发周期,避免重复劳动,一定程度上可以提高开发质量,不过这毕竟是别人的代码,若要完美满足甲方或自身的需求,还是要乖乖敲代码。本篇文章将讲述安卓开发者如何将Github上的项目应用在本地项目中。

m0_60334282的博客 1070

STM32异常与中断过程详解

1. 异常与中断概念引入 异常主要是指来自CPU内部的意外事件,比如执行了未定义指令、算术溢出、除零运算等发生在CPU内部的意外事件,这些异常的发生,会引起CPU运行相应的异常处理程序;中断一般来自硬件(如片上外设、外部I/O输入等)发生的事件,当这些硬件产生中断信号时,CPU会暂停当前运行的程序,转而去处理相关硬件的中断服务程序。但无论是异常还是中断,都会引起程序执行偏离正常的流程,转而去执行异常/中断的处理函数。 下面对异常和中断的介绍,如果中断信号的产生原因来自CPU内部,则称之为异常;如果中断信号来

luobeihai的博客 1万+

titlebar开源框架BaseTitlebar的使用

1.简介 basetitlebar是titlebar的扩展,用户可通过xml属性设置相应显示效果。 2.使用 使用方式:(因为bintray发送审核服务器问题,所以需要在项目的根目录build.gradle文件中添加,bintray审核通过后则不需添加这一句) maven: gradle: compile 'com.hlq:basetitlebar:1.0.1' 3.布局中使...

黄林晴 7420

当迁移学习遇见室内定位:基于UJIIndoorLoc的跨场景适配实践

本文探讨了迁移学习在跨建筑室内定位中的应用,重点解析了UJIIndoorLoc数据集的特性及其在解决设备差异和环境变化中的关键作用。通过特征工程、迁移学习策略和小样本微调技术,显著提升了定位模型的跨场景适配能力,为实际部署提供了有效解决方案。

weixin_29038155的博客 394

迪文串口屏开发环境搭建全流程:从DGUS Tool到串口联调

串口屏作为嵌入式人机交互的核心组件,通过串口通信实现主控MCU与显示终端的指令交互。其工作原理基于变量地址映射,主控读写VP地址即可驱动屏上控件,兼具低功耗与高稳定性。在工业控制、医疗设备及智能家居面板等场景中,串口屏能显著降低开发门槛与硬件成本。迪文屏凭借DGUS Tool上位机与自定义串口协议,成为主流选择。掌握DGUS Tool版本匹配、串口驱动安装及VP地址规划,是快速搭建开发环境的关键。

weixin_33937499的博客 602

Android:自定义基础类(BaseActivity)

【代码】Android:自定义基础类(BaseActivity)

qq_19688207的博客 756

Android HCE模拟NFC标签:实现跨设备NDEF数据共享

本文详细介绍了Android HCE技术如何模拟NFC标签实现跨设备NDEF数据共享。通过核心代码实现和标准AID配置,使手机能够被第三方NFC应用直接读取,支持文本、网址、Wi-Fi配置等多种数据类型,大幅提升设备间数据交换的便捷性和兼容性。

pytorch8learner的博客 248

Android 给BaseActivity设置一个TitleBar

写应用是有一个好的BaseActivity会为你节省很多代码.下面我们就来写一个类似AppCompatActivity一样直接带有TitleBar的BaseActivity.这样的话既便于修改又方便使用 实现的思路主要是 1.找到activity的根布局, 2.做一个适合自己使用的自定义title 3.将自定义的titleBar通过Java代码设置到BaseActivity中 话不多言,...

江南黄鹤 529

PostgreSQL的学习心得和知识总结(一百二十六)|深入理解PostgreSQL数据库SQL执行时间计算 \timing 和 log_duration的使用和原理

1、参考书籍:《PostgreSQL数据库内核分析》2、参考书籍:《数据库事务处理的艺术:事务管理与并发控制》3、

孤傲小二~阿沐的博客 983

基于聚类特征工程的水果销量预测:聚类算法对比与多模型评估

水果销量预测研究:聚类分群与多模型对比 摘要 本研究提出了一种融合聚类分析与机器学习的水果销量预测方法。基于包含12个维度的销售数据集,首先采用K-Means、BIRCH和DBSCAN三种聚类算法对水果品类进行分群,通过轮廓系数等指标评估显示BIRCH算法表现最优(0.387)。随后针对不同群组构建差异化特征工程,并比较XGBoost、LightGBM和LSTM三种预测模型性能。实验结果表明:基于聚类特征工程的LightGBM模型预测效果最佳(RMSE=2.34,R²=0.87).

huanghm88的专栏 137

BaseActivity中标题栏TitleBar的封装

在写程序的时候,很多时候我们都需要用到标题栏,标题栏基本上贯穿于整个APP应用,我们不可能在每个Activity中都单独写一个标题栏的布局,这样代码的复用性和可维护性很差,同时也显得臃肿,因此我们需要把这样共性的东西封装成一个基类TopBaseActivity,在这里面实现功能,让其他Activity继承基类TopBaseActivity就能实现标题栏功能,这样岂不是很方便,接下来一步一步的去实现

一杯清泉 3158

ubuntu22.04下对使用linuxdeployqt发布的qt程序进行deb打包操作

【代码】ubuntu22.04下对使用linuxdeployqt发布的qt程序进行deb打包操作。

十三阿哥的博客 1401

Android 自定义标题栏BaseActivity

如果每一个页面都要写一个一样的title,是不是感觉太繁琐了呢?毕竟同一件事情做多了我们都感觉到不爽。更重要的是,万一需求改了,每个title都要改一遍,相信很容易让人崩溃的。

黄海1991的博客 4990

LVGL在单色屏上运行

本文主要讲述LVGL在单色屏应用中的实现思路,并已验证通过。网上关于lvgl移植的文章有很多了,本文不加以赘述。

weixin_43278295的博客 4462

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Android封装含有通用标题栏的基类BaseActivity

安卓开发中,经常会遇到项目的标题栏基本样式都是一致的,只有个别界面需要定制化,而TitltBar或许跟我们的业务需求不是很相符,所以很多时候我们都想要去封装一个含有通用标题栏并且可定制化的BaseActivity。本文希望对有这方面需求的童鞋提供一种参考。效果图类似于这样 首先很多开发者比较喜欢的一种做法是写一份通用的标题栏布局,然后在每次创建的Activity的布局文件中去选择includ...

Leo Wang的博客 2855

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Android 简单的自定义控件(一)之BaseTitle

在项目开发中有些布局及功能等被大量的重复利用,我们每在一个地方使用都需要重复的去copy,浪费了很多无用的时间,而这些东西我们完全可以用一个自定义控件就可以省事,比如每个页面的Title,如果我们不将其定义封装,是不是每次都会去写一些标题栏的布局,今天我们就简单的讲解一下简单的自定义控件。 所谓的自定义控件,我个人认为就是原来Android提供给我们对应的控件不能够达到我们所需的功能需求或者是需要我

GuoXingWei_ToGo 808

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

(一) 抽取Activity基类--BaseActivity

为什么要抽取Activity基类?主要原因有两个: 第一个原因是方便代码编写,减少重复代码,快速开发。 第二个原因是优化代码结构,降低耦合度,方便修改。 还有一些其他原因:提高代码可读性,代码显得井井有条,看起来很优美。

RaphetS的博客 9159

Android学习笔记--BaseActivity和BaseFragment的再抽取

前言 以前都是对Activity或Fragment进行抽取,封装成BaseActivity或BaseFragment基类。随着Activity或Fragment的增加,往往基类的抽象方法就会越来越来多,但是很多时候它们的抽象方法是一样的。那么其实可以进一步的抽取,封装到一个接口当中。 BaseActivity以前的是这样的public abstract class BaseActivity ex

loveqRc的博客 1585

BaseActivity基类的抽取

``` package com.example.dell.yuekao.base; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v7.app.AppCompatActivity; import com.example.dell.yuekao.HttpUt...

qq_42859231的博客 372

Android标题栏的封装TitleBar

在开发中,如果我们不想要系统的标题栏,而是想要自己定义状态栏的话,就需要自定义布局,或者,每写一个activity,其对应的页面就要写一次标题栏的布局,那么,而且还要在activity中设置标题栏的值。 那为什么不把设置值封装一下,动态的去设置标题栏上的内容。 标题栏无非就是返回按钮,标题,还有右侧的选项,那么,我们先来写一个布局,高度我们给60dp,里面有什么呢: 1. 返回按钮 2. 返回

yanxiaosa的博客 3510

手把手教你如何搭建一个自己的安卓快速开发框架之BaseActivity(一)

博客出自:http://blog.youkuaiyun.com/u012534831 继上一篇博客已经好几个月没发布新博客了,中间因为教研室项目原因转手C#几个月,然后又加上各种事情(再加上懒 - -!)就落下了,并且有好多小伙伴给我留言上一篇播客的问题我都没能解答,在此给各位小伙伴说声抱歉了。 今天,又重拾安卓,准备慢慢构建一个自己的安卓快速开发框架,算是经验的总结和积累。网上这种东西很多,但是对于很

q2nAmor 3004

抽取基类 BaseActivity

public abstract class BaseActivity&lt;P extends BasePresenter&gt; extends AppCompatActivity implements IBaseView { public P presenter; @Override protected void onCreate(Bundle savedInstan...

浅若清兮 565

Android 标题栏(TitleBar)绝佳解决方案

TitleBar 项目地址:getActivity/TitleBar 简介:A simple generic title bar 更多:作者提 Bug 标签: 博客地址:Android 标题栏(TitleBar)绝佳解决方案 已投入公司项目多时,没有任何毛病,可胜任任何需求,点击此处下载 Demo 想了解实现原理的可以参考文章:纯手工打造一个通用的标题栏 Tit...

未来很长,但我会努力的走下去。 3075

Android基于4.4以上沉侵式状态栏和继承BaseActivity不用findViewbyid得到控件id

今天下午没事,刚刚完成了电商的规格功能,现在没事就来把我封装的BaseActivity给贴出来,我们在开始学习的时候,老师或者网上对初学者得到控件ID都是findViewbyid(R.id.xxx);这样的去得到控件ID,要嘛就是用注解的方式得到,我觉得这样很麻烦,反而会增加代码量,这些都是可规避的。先看看注解的用法注解 @BindView(R.id.xxx)//这儿的ID是布局中的ID B

TeaeMr 603

自定义基类BaseActivity,节省开发步骤

自己在开发过程中发现同一个APP中,一般多个activity都拥有相同的Titlebar,而且相同的按钮作用也是一样的,如果每次在xml中都去写布局文件,未免太费事,不如直接抽取一个基类BaseActivity,以后自己开发activity直接继承BaseActivity就好,这里记录下自己曾经抽取的BaseActivity public abstract class BaseActivity

逗比学习笔记 4600
上一篇: 关于 HttpURLConnection POST请求 上传 以及中文乱码问题
下一篇: 关于TabLayout+ViewPager+Fragment 简单明了的用法
我有名有姓
博客等级 码龄10年 1粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值