版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/f552126367/article/details/88547758
一、前言
标题栏是Android开发中永远也躲不过去的知识点,而自定义标题栏就成为了每个Android开发者必回的内容,我以前自定义标题栏有点稍微复杂,在androidMainfest中设置的没有标题栏,在每个xml中include一个自己写的layout,然后在BaseActivity中写入一些基本方法,在写的activity中直接调用,属于走了一点弯路,而今天介绍的是真正自定义ActionBar。
二、实例代码
1、首先ActionBar是在Style.xml中定义是否存在的,style.xml方式如下:请记住activity集成Activity和APPCompactActivity的style的parent是稍微不同的。
<!--根据ActionBar写的标题栏-->
<!-- Base application theme. -->
<style name="RealAppTheme" parent="Theme.AppCompat.Light">
<item name="windowActionBar">true</item>
<item name="actionBarStyle">@style/ClubActionbar</item>
<item name="android:windowNoTitle">true</item>
<item name="android:cursorVisible">true</item>
<!--状态栏颜色设置-->
<item name="colorPrimary">@android:color/holo_red_dark</item>
<item name="colorPrimaryDark">@android:color/holo_red_dark</item>
<!--设置标题栏的高度,默认是48dp-->
<!--<item name="android:actionBarSize">30dp</item>-->
</style>
<style name="ClubActionbar" parent="Widget.AppCompat.ActionBar">
<item name="contentInsetStart">0dp</item><!-- 设置该属性解决左侧空白部分-->
<item name="contentInsetEnd">0dp</item><!-- 设置该属性解决右侧空白部分-->
</style>
2、在androidMainfest调用,这个大家应该都没问题吧。
<activity
android:name=".module.database.ObjectBoxActivity"
android:theme="@style/RealAppTheme"></activity>
3、自定义ActionBar的xml文件写一个
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/bg_actionbar"
android:gravity="center_vertical">
<!--<TextView-->
<!--android:id="@+id/textViewTitle"-->
<!--android:layout_width="wrap_content"-->
<!--android:layout_height="wrap_content"-->
<!--android:layout_centerHorizontal="true"-->
<!--android:layout_centerVertical="true"-->
<!--android:layout_marginLeft="@dimen/actionbar_titleandback_back_width"-->
<!--android:layout_marginRight="@dimen/actionbar_titleandback_back_width"-->
<!--android:gravity="center"-->
<!--android:textColor="@color/white"-->
<!--android:textSize="@dimen/actionbar_title_txt" />-->
<TextView
android:id="@+id/textViewTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_centerVertical="true"
android:layout_marginLeft="@dimen/actionbar_home_left_margin"
android:gravity="center"
android:textColor="@color/white"
android:textSize="@dimen/actionbar_title_txt" />
<ImageView
android:id="@+id/imageViewMe"
android:layout_width="@dimen/actionbar_home_side_width"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_marginRight="@dimen/actionbar_home_margin"
android:contentDescription="@null"
android:gravity="center_vertical"
android:src="@drawable/ico_mine" />
</RelativeLayout>
4、自定义ActionBar的关键代码来了,
public class SiActionBar {
/***
* Title and Me actionBar
*
* @param actionbar
* @param titleText
* @param meOnClickListener
* @return
*/
public static ActionBar getHomeAndMeActionBar(ActionBar actionbar, String titleText,
View.OnClickListener meOnClickListener) {
actionbar.setDisplayShowCustomEnabled(true);
actionbar.setDisplayShowHomeEnabled(false);
actionbar.setDisplayShowTitleEnabled(false);
actionbar.setDisplayUseLogoEnabled(false);
if (Build.VERSION.SDK_INT >= 21) {
actionbar.setElevation(0);
}
actionbar.setCustomView(R.layout.actionbar_home);
((TextView) actionbar.getCustomView().findViewById(R.id.textViewTitle))
.setText(titleText);
((ImageView) actionbar.getCustomView().findViewById(R.id.imageViewMe))
.setOnClickListener(meOnClickListener);
return actionbar;
}
}
5、在activity中进行调用
SiActionBar.getTitleAndBackActionBar(getSupportActionBar(), new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
}, "ObjectBox的详细使用");
三、总结
以上就是可以自己定义xml的ActionBar的实现方式,看不懂的可以多看 几遍,感觉没啥难度,看懂了也就把ActionBar差不多弄明白了。自己也可以在SiActionBar中多封装几个xml方法,以后使用的时候就相当方便了。