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日

相关文章

  • Spring创建IOC容器的方式解析

    Spring创建IOC容器的方式解析 Spring是一个强大的Java开发框架,它提供了多种方式来创建IOC(控制反转)容器,用于管理和组织应用程序中的对象。以下是Spring创建IOC容器的几种常见方式: 1. XML配置文件方式 使用XML配置文件是最传统和常见的创建IOC容器的方式。在XML配置文件中,我们可以定义Bean的名称、类型、依赖关系等信息。…

    other 2023年10月17日
    00
  • GTA5 PC版ScriptHook无法加载怎么办 ScriptHook无法加载解决方法

    我会提供详细的攻略来解决这个问题。 GTA5 PC版ScriptHook无法加载怎么办 什么是ScriptHook? ScriptHook是一个GTA游戏的扩展模块,可用于PC版GTA5中。该扩展模块使得玩家可以使用额外的外部脚本来改变游戏中的各个方面,例如增加自定义车辆、人物或者场景等。 为什么ScriptHook无法加载? 当ScriptHook无法加载…

    other 2023年6月27日
    00
  • xilinxcoe文件格式小记

    xilinxcoe文件格式小记 简介 Xilinx COE是Xilinx Vivado和ISE工具支持的一种文件格式,用于描述数字电路模块中的数据。它是一种纯文本格式文件,可以用任何文本编辑器创建和编辑。 在数字电路的设计中,我们经常需要对数据进行初始化或存储,通常使用的一个较为通用的存储格式就是coe文件格式。每个coe文件格式包含了十六进制偏移量和相应十…

    其他 2023年3月28日
    00
  • 在win8.1上玩GTA4 无法识别双显卡的分析和解决方案

    下面是在win8.1上玩GTA4无法识别双显卡的分析和解决方案的完整攻略: 问题分析 在win8.1上玩GTA4时,有用户反映游戏无法识别双显卡,导致游戏画质较差、卡顿等问题。这是因为某些游戏无法识别双显卡的正确驱动程序,从而导致游戏无法充分利用双显卡的性能。 解决方案 方法一:使用可能的兼容模式启动游戏 在此情况下,您可以尝试使用可能的兼容模式启动游戏,这…

    other 2023年6月26日
    00
  • tomcat下jndi配置

    当您需要在Tomcat中配置JNDI以访问数据库时,可以按照以下步骤进行操作: 步骤说明 JNDI(Java Naming Directory Interface)是Java平台一种API,用于访问命名和目录服务。在Tomcat中,您可以使用JNDI配置数据源,以便在应用程序中访问数据库。以下是使用Tomcat配置JNDI的详细步骤: 打开Tomcat的co…

    other 2023年5月9日
    00
  • c#中 什么时候用yieldreturn

    c#中什么时候用yield return 在C#中,使用yield return关键字可以将一个方法转化为一个迭代器。当方法返回一个迭代器时,每次调用MoveNext()方法时都会执行一部分方法,返回一个值,并在下次继续执行方法,直到所有值都被返回。在本文中,我们将讨论在何种情况下应该使用yield return。 1. 处理大量数据 当需要处理大量数据时,…

    其他 2023年3月28日
    00
  • 如何添加ip地址?电脑添加额外ip地址的方法

    如何添加IP地址? 在电脑上添加额外的IP地址可以帮助您实现更多的网络连接和功能。下面是一份完整的攻略,教您如何添加IP地址。 步骤一:打开网络设置 首先,您需要打开电脑的网络设置。具体的步骤可能因操作系统的不同而有所差异,但通常可以在控制面板或系统设置中找到网络设置选项。 步骤二:选择网络适配器 在网络设置中,您将看到已连接的网络适配器列表。找到您想要添加…

    other 2023年7月30日
    00
  • 【HEVC简介】CTU、CU、PU、TU结构

    下面是关于HEVC中CTU、CU、PU、TU结构的详细讲解,包括基本概念、结构特点、使用流程和两个示例等方面。 基本概念 HEVC(High Efficiency Video Coding)是一种高效的视频编码标准,它采用了一种新的编码结构,即CTU、CU、PU、TU结构。其中,CTU(Coding Tree Unit)是最大的编码单元,CU(Coding …

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