写点什么

Meterial Design 常见控件的使用(一),安卓面试题 2018 中高级

用户头像
Android架构
关注
发布于: 刚刚

然后:


<android.support.v7.widget.Toolbar


android:id="@+id/toolbar"


android:layout_width="match_parent"


android:layout_height="?attr/actionBarSize"


android:background="@color/colorAccent"


app:logo="@mipmap/ic_launcher"


app:navigationContentDescription=""


app:navigationIcon="@drawable/ic_back_white_24dp"


app:subtitle="子标题"


app:subtitleTextColor="@color/white"


app:title="标题"


app:titleMarginStart="90dp"


app:titleTextAppearance="@style/ToolbarTitle"


app:titleTextColor="@color/white">


效果图这里不在贴出了,通过 app:titleTextAppearance=”@style/ToolbarTitle”方法的设置,就能修改标题字体的大小,当然文字颜色也可以修改。


到这里,你可能要问了,如果,我想要标题居中,怎么办呢?查看 api,toolbar 没有使其居中的方法,也就提供了使其距左右,上下边距大小的方法。不过不用担心,这里还是有办法的。看如下代码:


<android.support.v7.widget.Toolbar


android:id="@+id/toolbar"


android:layout_width="match_parent"


android:layout_height="?attr/actionBarSize"


android:background="@color/colorAccent">


<TextView


android:id="@+id/title"


android:layout_width="wrap_content"


android:layout_height="wrap_content"


android:layout_gravity="center"


android:text="标题"


android:textColor="@color/white"


android:textSize="22sp" />


</android.support.v7.widget.Toolbar>


效果图:



注意: 此时 TextView 控件的宽和高都是自适应大小,java 代码中此行代码setSupportActionBar(toolbar);就不要添加了,否则就会显示不正常。如果你非要添加setSupportActionBar(toolbar);这行代码的话,TextView 控件的宽要用 match_parent 属性。这里再次建议setSupportActionBar(toolbar);这行代码就不要点添加了。


至于它的作用,在此做一下简单的说明吧:


1)在 Toolbar 这个控件出现之前,其实我们也可以通过 ActionBar actionBar = getSupportActionBar(); 方法获取到 acitonbar,(前提你的 activity 主题 theme,是采用的带 actionbar 的主题,如果你采用这样的主题android:theme="@style/Theme.AppCompat.Light.NoActionBar">拿到的 actionBar 也是 null,显然是不行的)之后你就可以采用诸如下面的方面来操作 actionbar 啦。


ActionBar actionBar = getSupportActionBar();


if (actionBar != null) {


actionBar.setDisplayHomeAsUpEnabled(true);


actionBar.setDisplayShowTitleEnabled(true);


actionBar.setTitle("主标题");


......


} else {


Log.i(TAG, "onCreate: actionBar is null");


}


但是,原生自带的 ActionBar 设置的灵活性,还是有限,因此 Toolbar 这个控件,也就应运而生啦!此时,有的小伙伴说了,我虽然使用了 Toolbar 来代替 ActionBar,但是我还想使用 ActionBar 的一些特性怎么办呢?这个时候 setSupportActionBar(toolbar);就发挥其作用啦。添加这行代码,你的 toolbar 可以说也就具有了 ActionBar 的相关属性了。好啦,到此 setSupportActionBar(toolbar) 的作用也讲完了。如果你还不太明白的话,可以参考一下篇文章:


ActionBar和Toolbar的基础使用

结合 menu 配置文件的用法。

这里先看一下效果图:



首先在 menu 文件夹中,创建名为 menu.xml 文件(文件名随意的):


<menu xmlns:android="http://schemas.android.com/apk/res/android"


xmlns:app="http://schemas.android.com/apk/res-auto">


<item


android:id="@+id/action_search"


android:icon="@drawable/ic_search"


android:title="Search"


app:showAsAction="ifRoom" />


<item


android:id="@+id/action_notifications"


android:icon="@drawable/ic_delete_white_24dp"


android:title="notifications"


app:showAsAction="ifRoom" />


<item


android:id="@+id/action_settings"


android:icon="@mipmap/ic_launcher"


android:orderInCategory="100"


android:title="@string/action_settings"


app:showAsAction="never" />


</menu>


然后在代码中这样加载该 menu 文件即可:


toolbar.inflateMenu(R.menu.menu);


最后运行代码,就是上图的效果。


在这里,app:showAsAction 属性还是很有必要介绍一下滴。


app:showAsAction 有以下三个属性:


  1. ifRoom 表示在屏幕空间足够的情况下显示在 Toolbar 中,不够的话就显示在菜单中

  2. never 表示永远不显示在 Toolbar 中,而是一直显示在菜单中

  3. always 表示永远显示在 Toolbar 中,如果屏幕空间不够则不显示


注意:Toolbar 中的 action 按钮只会显示图标,菜单中的 action 按钮只会显示文字。


那如果设置了 ifRoom 属性之后,既然只显示图标不显示文字,那还设置 android:title=”Search” 文字干嘛呢?如果你设置了之后,虽然不显示,但是你长按相应按钮后,就会吐司相应文字内容的。


细心的你可能发现还有些不足的地方,就是上图的点击菜单选项时,弹出的菜单位置有点太靠上啦,能不能设置呢,还有菜单的背景和文字颜色能不能设置呢?答案当然是可以的!


首先设置好样式:


<style name="ToolbarPopupTheme" parent="@style/ThemeOverlay.AppCompat.Dark">


<!--<item na


《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
浏览器打开:qq.cn.hn/FTe 免费领取
复制代码


</style>


<style name="OverflowMenuStyle" parent="Widget.AppCompat.Light.PopupMenu.Overflow">


</style>


然后直接在这里引用就可以了: app:popupTheme=”@style/ToolbarPopupTheme”


<android.support.v7.widget.Toolbar


android:id="@+id/toolbar"


android:layout_width="match_parent"


android:layout_height="?attr/actionBarSize"


android:background="@color/colorAccent"


app:popupTheme="@style/ToolbarPopupTheme">


<TextView


android:id="@+id/title"


android:layout_width="wrap_content"


android:layout_height="wrap_content"


android:layout_gravity="center"


android:text="标题"


android:textColor="@color/white"


android:textSize="22sp" />


</android.support.v7.widget.Toolbar>


效果图:



与 AppBarLayout 结合的使用



(1): app:layout_scrollFlags=”scroll”

xml 代码:


<?xml version="1.0" encoding="utf-8"?>


<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"


xmlns:app="http://schemas.android.com/apk/res-auto"


android:layout_width="match_parent"


android:layout_height="match_parent">


<android.support.design.widget.AppBarLayout


android:layout_width="match_parent"


android:layout_height="wrap_content">


<android.support.v7.widget.Toolbar


android:id="@+id/toolbar"


android:layout_width="match_parent"


android:layout_height="?android:attr/actionBarSize"


android:background="@color/colorAccent"


app:layout_scrollFlags="scroll"


app:popupTheme="@style/ToolbarPopupTheme">


</android.support.v7.widget.Toolbar>


</android.support.design.widget.AppBarLayout>


<android.support.v4.widget.NestedScrollView


android:id="@+id/nestedScrollView"


android:layout_width="match_parent"


android:layout_height="match_parent"


app:layout_behavior="@string/appbar_scrolling_view_behavior">


<LinearLayout


android:layout_width="match_parent"


android:layout_height="match_parent"


android:orientation="vertical">


<TextView


android:layout_width="wrap_content"


android:layout_height="wrap_content"


android:layout_margin="16dp"


android:text="@string/large_text" />


</LinearLayout>


</android.support.v4.widget.NestedScrollView>


</android.support.design.widget.CoordinatorLayout>


首先注意最外层:包裹了一层 android.support.design.widget.CoordinatorLayout 布局,那 CoordinatorLayout 布局是什么的,我们可以理解为它是加强版的 FramLayout。然后注意:Toolbar 的新添加的这条属性 app:layout_scrollFlags=”scroll” 。最后看一看效果图:



PS:对于 scroll 属性,网上也有说的比较专业的,不过我认为从产生的效果角度去分析的话,那就是:往上滑动就不说了,往下滑动就是当下面的滚动布局滑动到顶端时,标题栏 toolbar 才会滑出来。该属性实用性一般吧。

(2):app:layout_scrollFlags=”scroll|enterAlways”

scroll 与 enterAlways 结合产生的效果图如下:



PS:我们还是从产生的效果角度去分析的:往下滑动时,,标题栏 toolbar 会优先滑出来,然后滚动布局才开始滑动。就像该单词的意思一样:总是在。也就是只要添加了该属性值,下滑时 toolbar 总是优先滑出来。该属性比较实用。

(3): app:layout_scrollFlags=”scroll|enterAlways|snap”

在以上基础上,在与 snap 结合所产生的效果图如下:



PS:还是从产生的效果角度去分析的:不管是往下或者往上滑动时,,标题栏 toolbar 首先还是和(2)中一样的,不过有个细微的不同,toolbar 会根据当前的滚动距离,自动选择是隐藏还是显示。该属性实用性也一般。

(4): app:layout_scrollFlags=”scroll|enterAlways|exitUntilCollapsed”

scroll 与 enterAlways 与 exitUntilCollapsed 结合所产的效果图如下:



注意此时 Toolbar 的布局有些许改变(改变后的):


<android.support.v7.widget.Toolbar


android:id="@+id/toolbar"


android:layout_width="match_parent"


android:layout_height="100dp"


android:background="@color/colorAccent"


android:minHeight="40dp"


app:layout_scrollFlags="scroll|enterAlways|exitUntilCollapsed"


app:popupTheme="@style/ToolbarPopupTheme">


</android.support.v7.widget.Toolbar>


我们给 Toolbar 设置了一个最小高度 android:minHeight=”40dp”,然后又把正常高度改变了,并随意改成了 100dp。


PS:还是从产生的效果角度去分析的:默认 toolbar 显示的正常高度值我们设置成的 100dp,当我们上滑的时候,高度达到最小高度 40dp 时,toolbar 不在滑动了。该属性感觉实用性不强。

(5): app:layout_scrollFlags=”scroll|enterAlways|enterAlwaysCollapsed”

scroll 与 enterAlways 与 enterAlwaysCollapsed 结合所产的效果图如下:



xml 中 Toolbar 的布局和(4)还是一样的,不过 app:layout_scrollFlags 属性,由原来的 exitUntilCollapsed 改为 enterAlwaysCollapsed。


PS:还是从产生的效果角度去分析的:默认 toolbar 显示的正常高度值我们设置成的 100dp,当我们上滑的时候,toolbar 直到完全隐藏时,下面的滚动布局才开始发生滚动;下滑时 toolbar 会优先滑出设置的最小高度值,然后当滚动布局下滑到顶部时,后面的 toolbar 部分,才开始完全显示(滑)出来。该属性感觉实用性也不强。


与 CollapsingToolbarLayout 结合的使用




(1):先看下效果图:



再把代码贴上:


<?xml version="1.0" encoding="utf-8"?>


<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"


xmlns:app="http://schemas.android.com/apk/res-auto"


android:layout_width="match_parent"


android:layout_height="match_parent"


android:fitsSystemWindows="true">


<android.support.design.widget.AppBarLayout


android:id="@+id/app_bar"


android:layout_width="match_parent"


android:layout_height="180dp"


android:fitsSystemWindows="true"


android:theme="@style/AppTheme.NoActionBar.AppBarOverlay">


<android.support.design.widget.CollapsingToolbarLayout


android:id="@+id/toolbar_layout"


android:layout_width="match_parent"


android:layout_height="match_parent"


android:fitsSystemWindows="true"


app:contentScrim="?attr/colorPrimary"


app:layout_scrollFlags="scroll">


<ImageView


android:id="@+id/image"


android:layout_width="match_parent"


android:layout_height="180dp"


android:scaleType="centerCrop"


android:src="@drawable/ic_image"


app:layout_collapseMode="parallax" />


<android.support.v7.widget.Toolbar

用户头像

Android架构

关注

还未添加个人签名 2021.10.31 加入

还未添加个人简介

评论

发布
暂无评论
Meterial Design常见控件的使用(一),安卓面试题2018中高级