android——打造超级方便的一键式添加型Title

本文介绍了如何通过创建TitleBar类和BaseActivity,简化Android应用中标题栏的添加和管理。通过继承自定义的BaseActivity,只需几行代码即可完成标题、按钮的设置和事件监听,大大提高了开发效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天在自己尝试制作App,使用以前的老办法自定义一个title,写着写着发觉很不方便:1,每个界面都有title,一直重复为每个界面添加特别麻烦。2,不同的界面有不同的要求,有的界面之又返回键,有的界面有返回键和更多选项。

虽然以上两个问题非常说起来很简单,但是做起来代码量真的非常大,于是开始想有没有一种办法可以用几行代码就控制title的添加与移除?更改title名称?或者说为每个右选项按钮设置不同的点击事件?

答案肯定是有的,如果是新手,请跟着文章的思路一直往下走,不要急。这里就要用到自定义view的知识啦,首先我们创建一个TitleBar的类,并且制作一个title样式:

xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tool="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="60dp"
        android:background="#9089B3">

        <ImageView
            android:id="@+id/back"
            android:layout_width="60dp"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:background="@drawable/back"
            android:visibility="gone" />

        <TextView
            android:id="@+id/activity_title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:textColor="@android:color/white"
            android:textSize="25dp"
            tool:text="hahahahahah" />

        <ImageView
            android:id="@+id/more"
            android:layout_width="60dp"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:background="@drawable/more"
            android:visibility="gone" />

    </RelativeLayout>
</LinearLayout>

左右两边各一个按钮,默认隐藏,需要的时候设置显示,中间一个标题,根据不同的页面设置不同的标题,这里要说明一下为什么我们还要在外面嵌套一个LinaerLayout,因为我们的思路是,将主页面的布局,添加到这个title下面,实现自动添加title,可能说起来比较难理解,我用一个图画给大家表示:

首先我们创建的title是一个这样的布局文件:


我们将每个需要使用title的页面添加到红框下方,这样就实现了自动添加title了,这里我们需要创建一个TitleBar类来加载红框的title布局

TitleBar类:

package com.example.administrator.bortherhotpot;

import android.app.Activity;
import android.content.Context;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;

/**
 * Created by Administrator on 2018/3/8.
 */

public class TitleBar extends RelativeLayout implements View.OnClickListener {
    public TextView title;
    public ImageView back, more;


    public TitleBar(Context context) {
        super(context);
    }

    public TitleBar(Context context, int res) {
        super(context);
        LayoutInflater from = LayoutInflater.from(context);
        LinearLayout view = (LinearLayout) from.inflate(R.layout.activity_title, this, false);
        title = view.findViewById(R.id.activity_title);
        back = view.findViewById(R.id.back);
        more = view.findViewById(R.id.more);
        view.addView(from.inflate(res, view, false));
        addView(view);
    }

    public TitleBar(Context context, AttributeSet attributeSet) {
        super(context, attributeSet);

    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.back:
                ((BaseActivity) getContext()).finish();
                break;
            case R.id.more:
                ((BaseActivity) getContext()).onClickRight();
                break;
        }
    }
}

这里设置TitleBar这个类继承相对布局,并且将我们的布局文件添加到view上面,初始化控件,然后添加我们的页面布局,为每个控件设置好监听,左键设置点击之后当前布局关闭,右键设置点击之后调用我定义的onClickRight()方法。

到了这里这个东西就初步完成了,但是我们还没有达到上面一行代码添加title的要求,这里,我们就可以创建一个BaseActivity继承Activity,再用我们的每个界面的Activity继承BaseActivity。

至于BaseActivity里面应该添加什么,代码如下:

package com.example.administrator.bortherhotpot;

import android.app.Activity;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.view.View;
import android.view.ViewGroup;
import android.widget.RelativeLayout;

/**
 * Created by Administrator on 2018/3/8.
 */

public abstract class BaseActivity extends Activity {
    private TitleBar title;

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

    public void setContentView(int res) {
        RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 
ViewGroup.LayoutParams.WRAP_CONTENT);
        title = new TitleBar(this, res);
        title.setLayoutParams(layoutParams);
        super.setContentView(title);
        initView();
    }

    public abstract void initView();

    public void setDefule() {
        title.back.setVisibility(View.VISIBLE);
    }

    public void setMiddleTitle(String s) {
        title.title.setText(s);
    }

    public void setRightTitle() {
        title.more.setVisibility(View.VISIBLE);
    }

    public void onClickRight() {
    }
}

这里和普通的Activity写法差不多,唯一不同的,就是我们将setContentView卸载了oncreat方法的外面,为什么呢?这里如果不懂的同学可以去源码看看setContenView的介绍,setContentView()可以传入几个参数,其中一种就是资源id,这里就是使用的这个方法,拿到了我们每个继承自BaseActivity的Activity的布局id,然后我们为之前的Title设置显示方式,再创建一个抽象类,用于调用下方的四种方法。

写完之后,我们就可以写页面了,

MainActivity:

package com.example.administrator.bortherhotpot;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

public class MainActivity extends BaseActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

    }

    @Override
    public void initView() {
        setDefule();
        setMiddleTitle("hahah");
        setRightTitle();
    }
}

看,仅仅三行代码,就添加了title并且设置了title标题和显示左右按钮以及右键退出,是不是很方便?

附上效果图:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值