因为某些需求不得不使ActionBar引入自己写的布局文件,这样更有可维护性。中间也走了很多坑,布局文件并不会填充整个ActionBar的空间,左边右边下面会留有间隔,看过一些资料都试了一下,终于搞好了。
左右间隔问题,会在样式里面有属性来设置为0dp
下面有间隙,在样式里固定写死高度这个属性即可。
好了,贴代码吧。
1.在清单文件里引用一下你的主题样式:
<application
android:name=".app.MyApplication"
android:icon="@drawable/app_icon"
android:label="@string/app_name"
android:theme="@style/MyAppTheme">
2.自定义的样式:注释着重看下
<!-- Base application theme. -->
<style name="MyAppTheme" parent="Theme.AppCompat.Light">
<!-- Customize your theme here. -->
<!-- All customizations that are NOT specific to a particular API-level can go here. -->
<item name="android:actionBarStyle">@style/MyActionBarStyle1</item>
<!-- Support library compatibility -->
<item name="actionBarStyle"> @style/MyActionBarStyle1</item>
<!-- 注意,该句指定此样式中的actionbar的高度 -->
<item name="android:actionBarSize">51dp</item>
<!-- 注意,5.0以下该句指定此样式中的actionbar底部没有阴影和分界线高度 -->
<item name="android:windowContentOverlay">@null</item>
</style>
<style name="MyActionBarStyle1" parent="@style/Widget.AppCompat.Light.ActionBar.Solid">
<item name="android:background">@color/white</item>
<!-- Support library compatibility -->
<item name="background">@color/white</item>
<!--解决左边一直有一块边距的问题 contentInsetStart = 0 -->
<item name="contentInsetStart">0dp</item>
<item name="contentInsetEnd">0dp</item>
</style>
3.在BaseActivity中对ActionBar进行封装设置
/**
* 自定义actionBar标题栏
*/
ActionBar actionBar = getSupportActionBar();
if (actionBar != null) {
actionBar.setDisplayShowCustomEnabled(true);
actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
View view = LayoutInflater.from(this).inflate(R.layout.layout_title,null);
ActionBar.LayoutParams layoutParams = new ActionBar.LayoutParams(ActionBar.LayoutParams.MATCH_PARENT, ActionBar.LayoutParams.MATCH_PARENT);
actionBar.setCustomView(view,layoutParams);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {//21
actionBar.setElevation(0);//5.0以上去阴影
}
tvTitle = (TextView) view.findViewById(R.id.tv_title);
String title = getTitle().toString();
tvTitle.setText(title);
ivBack = (ImageView) view.findViewById(R.id.iv_back);
ivBack.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
}
getTitle()可以获得activity中label标签的值
4.布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="55dp"
android:orientation="vertical">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="50dp"
android:orientation="horizontal">
<ImageView
android:id="@+id/iv_back"
android:layout_width="30dp"
android:layout_height="30dp"
android:src="@mipmap/back_home"
android:layout_centerVertical="true"
android:layout_marginLeft="10dp"
android:layout_alignParentLeft="true"
android:padding="3dp"/>
<TextView
android:id="@+id/tv_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="end"
android:includeFontPadding="false"
android:maxEms="15"
android:maxLines="1"
android:text=""
android:textColor="@color/text_primary"
android:textSize="17sp"
android:layout_centerInParent="true"/>
<LinearLayout
android:id="@+id/ll_right"
android:layout_width="25dp"
android:layout_height="25dp"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_marginRight="10dp"
android:gravity="center"
android:orientation="horizontal"
android:visibility="gone" />
</RelativeLayout>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#E5E6E7" />
</LinearLayout>
网友评论