Android自定义通用标题栏CustomTitleBar

下面是详细的Android自定义通用标题栏CustomTitleBar的攻略:

一、背景介绍

在很多Android应用中都会有通用的标题栏,包括应用名称、返回按钮、菜单按钮等等。这些通用的功能可以通过自定义通用标题栏来实现,这样不仅可以提高应用的美观程度,还可以增强用户的体验感。

二、实现方式

实现自定义通用标题栏有多种方式,这里介绍两种比较常用的方式。

1. 自定义 XML 文件实现

第一步,创建一个布局文件,命名为custom_title_bar.xml,代码如下:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/custom_title"
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"
    android:background="@color/colorPrimary">

    <ImageButton
        android:id="@+id/btn_title_left"
        android:layout_width="?android:attr/actionBarSize"
        android:layout_height="?android:attr/actionBarSize"
        android:layout_alignParentStart="true"
        android:layout_centerVertical="true"
        android:background="?attr/selectableItemBackgroundBorderless"
        android:scaleType="centerInside"
        android:padding="@dimen/default_padding"
        android:src="@drawable/ic_keyboard_arrow_left_white_24dp"
        android:contentDescription="@string/back"
        />

    <TextView
        android:id="@+id/tv_title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:textColor="@android:color/white"
        android:textSize="@dimen/text_size_normal"
        android:text="@string/app_name"
        />

    <ImageButton
        android:id="@+id/btn_title_right"
        android:layout_width="?android:attr/actionBarSize"
        android:layout_height="?android:attr/actionBarSize"
        android:layout_alignParentEnd="true"
        android:layout_centerVertical="true"
        android:background="?attr/selectableItemBackgroundBorderless"
        android:scaleType="centerInside"
        android:padding="@dimen/default_padding"
        android:src="@drawable/ic_menu_white_24dp"
        android:contentDescription="@string/menu"
        />

</RelativeLayout>

这里使用了RelativeLayout布局,包含了左边的返回按钮、中间的应用名称和右边的菜单按钮,注意在ImageButton中要设置android:background="?attr/selectableItemBackgroundBorderless"以便提高用户的体验。

第二步,将自定义的标题栏加入Activity中,代码如下:

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

    getSupportActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
    getSupportActionBar().setCustomView(R.layout.custom_title_bar);
    getSupportActionBar().setElevation(0);
}

这里使用了AppCompat中的getSupportActionBar()方法获取ActionBar,并通过setDisplayOptions、setCustomView和setElevation方法实现自定义标题栏。

第三步,监听按钮事件,代码如下:

private void initTitleBar() {
    ImageButton btnLeft = findViewById(R.id.btn_title_left);
    btnLeft.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            finish();
        }
    });

    ImageButton btnRight = findViewById(R.id.btn_title_right);
    btnRight.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            showMenuPopup();
        }
    });
}

这里通过findViewById方法获取ImageButton的ID,并通过setOnClickListener监听按钮的点击事件,在点击事件中实现相应的逻辑。

2. 自定义 Java 类实现

第一步,创建一个自定义标题栏类CustomTitleBar,代码如下:

public class CustomTitleBar extends RelativeLayout {
    private ImageButton mBtnLeft;
    private TextView mTvTitle;
    private ImageButton mBtnRight;

    public CustomTitleBar(Context context) {
        super(context);
        initView(context);
    }

    public CustomTitleBar(Context context, AttributeSet attrs) {
        super(context, attrs);
        initView(context);
    }

    public CustomTitleBar(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        initView(context);
    }

    private void initView(Context context) {
        View view = LayoutInflater.from(context).inflate(R.layout.custom_title_bar, this);
        mBtnLeft = view.findViewById(R.id.btn_title_left);
        mTvTitle = view.findViewById(R.id.tv_title);
        mBtnRight = view.findViewById(R.id.btn_title_right);
    }

    public void setTitle(String title) {
        mTvTitle.setText(title);
    }

    public void setLeftButton(int resId, OnClickListener listener) {
        mBtnLeft.setImageResource(resId);
        mBtnLeft.setOnClickListener(listener);
    }

    public void setRightButton(int resId, OnClickListener listener) {
        mBtnRight.setImageResource(resId);
        mBtnRight.setOnClickListener(listener);
    }
}

这里通过继承RelativeLayout类,实现自定义标题栏的功能。使用了initView方法将自定义布局文件custom_title_bar.xml加入到CustomTitleBar中,并通过findViewById方法获取内部的ImageButton和TextView。

为了方便外部的Activity调用,提供了setTitle、setLeftButton和setRightButton三个方法,分别用于设置标题、设置左边的返回按钮和设置右边的菜单按钮。

第二步,将自定义标题栏加入Activity中,代码如下:

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

    CustomTitleBar customTitleBar = findViewById(R.id.title_bar_layout);
    customTitleBar.setTitle(getString(R.string.app_name));
    customTitleBar.setLeftButton(R.drawable.ic_keyboard_arrow_left_white_24dp, new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            finish();
        }
    });
    customTitleBar.setRightButton(R.drawable.ic_menu_white_24dp, new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            showMenuPopup();
        }
    });
}

这里通过findViewById方法获取自定义标题栏CustomTitleBar的ID,并使用setTitle、setLeftButton和setRightButton方法设置标题、左侧按钮和右侧按钮的图片和点击事件。

三、总结

通过以上两种方式的介绍,我们可以实现自定义通用标题栏。两种方式的实现方法不同,但是都可以实现相同的功能,在实际开发中可以根据自己的需要选择适合自己的实现方式。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Android自定义通用标题栏CustomTitleBar - Python技术站

(0)
上一篇 2023年6月25日
下一篇 2023年6月25日

相关文章

  • anddesignpro入坑指南

    以下是“AndDesignPro入坑指南”的完整攻略: AndDesignPro入坑指南 AndDesignPro是一款基于Web的UI设计工具它提供了丰富的设计元素和模板,助您轻松创建漂亮的UI设计。本攻略将介绍如何使用AndDesignProUI设计。 步骤1:注册AndDesignPro账号 要使用AndDesignPro进行UI设计,您需要先注册一个…

    other 2023年5月7日
    00
  • Android使用自定义PageTransformer实现个性的ViewPager动画切换效果

    Android使用自定义PageTransformer实现个性的ViewPager动画切换效果攻略 在Android开发中,ViewPager是一个常用的控件,用于实现页面切换效果。通过自定义PageTransformer,我们可以实现个性化的ViewPager动画切换效果。下面是详细的攻略,包含两个示例说明。 步骤一:创建自定义的PageTransform…

    other 2023年8月20日
    00
  • MMC组策略打开时,弹出“管理单元初始化失败”

    MMC组策略打开时,弹出“管理单元初始化失败”的攻略 1. 问题背景 当我们尝试打开MMC组策略编辑器时,可能会遇到管理单元初始化失败的问题。这个问题会导致我们无法使用组策略编辑器编辑组策略,需要尽快解决。 2. 可能出现的原因 管理单元初始化失败可能由多种原因导致,下面列出几种常见的原因: 关键组件没有启动 组策略模板文件损坏或缺失 许多MMC控件没有注册…

    other 2023年6月20日
    00
  • javascript实现快速排

    JavaScript实现快速排序的完整攻略 快速排序是一种常用的排序算法,它的时间复杂度为O(nlogn),是一种高效的排序算法。本文将介绍如何使用JavaScript实现快速排序,并提供两个示例说明。 快速排序的原理 快速排序的原理是通过一趟排序将待排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按照此方法对这两部分…

    other 2023年5月5日
    00
  • 服务器间如何实现文件共享

    实现服务器间的文件共享有很多方式,其中最常见的方式是使用网络文件系统(NFS)和Server Message Block(SMB)协议。下面将详细讲解这两种方式的实现方法。 1. NFS 1.1 安装NFS服务器 要在Linux系统上使用NFS,需要首先安装NFS服务器。在Debian或Ubuntu系统中,可以通过以下命令安装: sudo apt-get u…

    other 2023年6月27日
    00
  • spring boot整合CAS配置详解

    下面为你讲解“Spring Boot整合CAS配置详解”。 1. 前置知识 在开始讲解之前需要了解的几个概念: CAS(Central Authentication Service,中心认证服务):是 Yale 大学发起的一个企业级的、开源的、单点登录系统。 Spring Boot:是一个基于 Spring 框架实现的、简化了配置的快速开发框架。 Thyme…

    other 2023年6月25日
    00
  • bash shell命令行选项与修传入参数处理

    当我们使用bash shell命令行时,通常会看到很多选项和参数。选项通常是单个字符,前面带有一个短横线字符(例如“-a”),而参数则指定需要执行的操作或者操作中需要使用的数据。 bash shell提供了多种方法来支持命令行选项与参数的处理: getopts命令 getopts命令可以用于解析命令行选项。它可以帮助我们识别和捕捉命令行选项,然后执行不同的操…

    other 2023年6月26日
    00
  • jenkins部署分支报finished:unstable的问题解决

    当然,我可以为您提供有关“Jenkins部署分支报finished:unstable的问题解决”的完整攻略,以下是详细说明: 问题描述 在使用Jenkins分支部署时,可能会遇到“finished:unstable”状态的问题。这种情况通常表示构建过程中出现了一些问题,但构建仍然完成了。这可能会导致部署失败或出现其他问题。 问题解决 以下是解决Jenkins…

    other 2023年5月7日
    00
合作推广
合作推广
分享本页
返回顶部