Android使用自定ToolBar

首先先把程序自带的ActionBar去掉

修改values/styles.xml中的内容:

其他地方先不要改,在style标签中添加两句

<item name="windowNoTitle">true</item>
<item name="windowActionBar">false</item>
然后运行能看到结果


但是发现通知栏是蓝色的,很不美观,这蓝色实际上是当前的一个主题颜色

在style标签下再增加一条

<item name="android:windowTranslucentStatus"> true </item>

然后再运行,能看到结果


到这我们就把自带的顶部栏给弄没啦

新建并调用自己的ToolBar布局文件

1. 新建布局文件my_toolbar.xml,添加如下内容

my_toolbar.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/my_toolbar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:minHeight="?attr/actionBarSize"
    android:textSize="45sp"
    android:fitsSystemWindows="true"
    android:popupTheme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
    app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
    android:background="@drawable/my_gradient_1">
</android.support.v7.widget.Toolbar>

保存。

其中android:background="@drawable/my_gradient_1"为我自己新建的一个资源文件,这个资源文件描述的就是一个渐变色

具体内容见下(放在drawable文件夹下)

my_gradient_1.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <gradient
        android:angle="45"
        android:startColor="#E0C3FC"
        android:endColor="#8EC5FC"
        android:type="linear" />
</shape>

2. 将自定义的my_toolbar布局添加进主布局

在activity_main.xml的最外层布局内,添加

<include layout="@layout/my_toolbar"/>

3. 转到MainActivity.java

(1)首先声明Toolbar类型的变量toolbar(需要导入包  import android.support.v7.widget.Toolbar)

(2)找到其对应的View

toolbar=findViewById(R.id.my_toolbar);

(3)设置标题

toolbar.setTitle("Hello");

(4)加载toolbar

setSupportActionBar(toolbar);

运行就能看见结果啦


其他

Toolbar中自带一个textview和imageview等(我暂时就用到这两个。。。)

可调用方法设置这两部分的内容

1. TextView

toolbar.setTitle("添加自己的标题,如我真帅");

2. ImageView

toolbar.setLogo(这里可以写资源的id或Drawable类型的资源,如R.drawable.my_icon_1);

其中R.drawable.my_icon_1是我自己建立的一个图标文件(AndroidStudio中可以将SVG的图片或图标转成xml文件,放在drawable文件夹下

具体内容见下

my_icon_1.xml

<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="24dp"
    android:height="24dp"
    android:viewportWidth="24.0"
    android:viewportHeight="24.0">
    <path
        android:fillColor="#FF000000"
        android:pathData="M4,10.5c-0.83,0 -1.5,0.67 -1.5,1.5s0.67,1.5 1.5,1.5 1.5,-0.67 1.5,-1.5 -0.67,-1.5 -1.5,-1.5zM4,4.5c-0.83,0 -1.5,0.67 -1.5,1.5S3.17,7.5 4,7.5 5.5,6.83 5.5,6 4.83,4.5 4,4.5zM4,16.5c-0.83,0 -1.5,0.68 -1.5,1.5s0.68,1.5 1.5,1.5 1.5,-0.68 1.5,-1.5 -0.67,-1.5 -1.5,-1.5zM7,19h14v-2L7,17v2zM7,13h14v-2L7,11v2zM7,5v2h14L21,5L7,5z"/>
</vector>

最终的运行结果见下


发现图标是黑色的,而且文字离图标太近了,我们可以把“我真帅”改成“   我真帅”(前面有三个空格。。。感觉有点治标不治本的感觉。。。)

对图标来说,能在xml文件中修改颜色,也能在代码中修改。这一部分内容见下。

获取toolbar中TextView和ImageView的id号

虽然能用setTitle和setLogo的方式更改标题和图标,但是感觉能做的东西相对来说少了很多

1. 获取TextView

这里参考了https://blog.csdn.net/noiary/article/details/47449411

这个方法只能使用在已经设置过一次title后即使用过一次toolbar.setTitle()或类似的行为后,而且对于简单的获取来说有一些多余的地方。那就在调用之前先设置一下默认或初始的Logo和Title后再使用此方法。

public static TextView getToolbarTextView(Toolbar toolbar){
    for(int i= 0; i < toolbar.getChildCount(); i++){
        View v = toolbar.getChildAt(i);
        if(v != null && v instanceof TextView){
            return (TextView)v;
        }
    }
    return null;
}

2. 获取ImageView

和上面的类似,就是把TextView改成了ImageView

public static ImageView getToolbarImageView(Toolbar toolbar){
    for(int i= 0; i < toolbar.getChildCount(); i++){
        View v = toolbar.getChildAt(i);
        if(v != null && v instanceof ImageView){
            return (ImageView)v;
        }
    }
    return null;
}

当然可以把上述两个方法结合一下,用一次循环给两个全局变量imageview和textview赋值。

到这里的代码都在链接里:https://pan.baidu.com/s/18GDxI2mQ-BlqBnyBx1-R6w 失效了告诉我哦。。。

本人水平有限,不对之处还望大家指出哈

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值