美文网首页
ActionBar自定义布局并填充,设置的样式,并封装Actio

ActionBar自定义布局并填充,设置的样式,并封装Actio

作者: 文艺范码农 | 来源:发表于2017-06-01 15:28 被阅读0次

    因为某些需求不得不使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>
    

    相关文章

      网友评论

          本文标题:ActionBar自定义布局并填充,设置的样式,并封装Actio

          本文链接:https://www.haomeiwen.com/subject/jocefxtx.html