1.toobar 我们新建一个项目后,熟悉是你指定一个app命名空间,有了它我们才可以指定id,宽,高等类型。xmlns:android 也是命名空间
xmlns:app="http://schemas.android.com/apk/res-auto"
2.我们定义一个v7包中的Toolbar控件,在其中theme属性是设置主题的我们可以将主题转变为浅色的主题,popupTheme它是设置弹出菜单框主题的。一下都是浅色主题
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" app:popupTheme="@style/Theme.AppCompat.Light"
3.我们在主函数中通过findViewById()找到toobar实例,通过setSupporyActionBar()开启实例,我们也可以在清单文件中的activity中添加android:lable属性,它是设置我们应用名称的。
4.如果我们想添加几个图标充当按钮时我们首先要在res下创建menu文件夹在这个文件夹中创建xml文件,我们用<item>标签来定义按钮,icon属性是设置图片的,title属性设置标题,showAsAction属性设置它显示的位置,它有以下几种选择:always永远显示在toolbar中直到空间不足时候不显示;ifRoom,在ToolBar空间足够的时候显示在控件上,如果不够就显示在菜单中,never永久显示在菜单中。
1 <menu xmlns:android="http://schemas.android.com/apk/res/android" 2 xmlns:app="http://schemas.android.com/apk/res-auto" > 3 <item 4 android:id ="@+id/backup" 5 android:icon="@drawable/b" 6 android:title="Backup" 7 app:showAsAction="always" 8 /> 9 <item 10 android:id ="@+id/delete" 11 android:icon="@drawable/a" 12 android:title="delete" 13 app:showAsAction="ifRoom" 14 /> 15 <item 16 android:id ="@+id/setting" 17 android:icon="@drawable/setting" 18 android:title="Setting" 19 app:showAsAction="never" 20 /> 21 </menu>
下面我们就实现点击事件,首先在主函数中通过onCreateOptionsMenu()方法加载我们创建的xml文件然后在onOptionsItemSelected()方法中实现点击事件
public boolean onCreatePanelMenu(int featureId, Menu menu) { getMenuInflater().inflate(R.menu.toolbar,menu); return true; } public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()){case R.id.backup: Toast.makeText(getApplicationContext(),"上传中。。。",Toast.LENGTH_SHORT).show(); break; case R.id.delete: 。。。。 } return true; } }
下面我们介绍滑动菜单:
滑动菜单就是将一些菜单选项隐藏起来,通过滑动的方式将菜单显现出来,在这我们用到DrawerALayout控件,它首先是一个布局,它的里面可以放两个子控件,第一个是直接在显示屏上显示的,另一个为滑动时候显示的。这里没有限制固定的控件
我们说一下textView中layout_gravity控件,这个属性必须设置,它是控制在那边滑动的,start表示根据系统滑动,left表示在左边滑动,right右侧滑动
下面我们添加导航按钮,首先DrawerLayout实例,用它调用find找到找到滑动实例,然后调用getSupportActionBar()方法得到ActionBar实例,然后用ActionBar调用setDisPlayHomeAsUpEnable()方法让导航按钮显现出来,然后再按调用setHomeAsUpIndicator()添加导航图片。实际上,TooBar最左侧的按钮将HomeAsUp按钮,它的默认图标为箭头,含返回上一个活动的功能,接下来我们在onOptionsInemSelected中设置HomeAsUp按钮的点击事件,R.id.home
我们这里调用了DrawerLayout的openDrawer方法是导航显现出来,注意它要求传入Gravity参数,这里我们传入GravityCompat.START来保证与xml文件一致
NavigationView滑动菜单界面,它是design SuPPORT库中的方法,要想使用它就要添加依赖
第一行添加design Support库,第二行是开源项目circlerimageview,他可以使图片圆形化。
我们需要先准备menu和headerLayout。在menu中我们设置标题和图标
代码中 group表示组,single表示只能选择一个。
下面我们在layout文件中创建headerLayout布局
1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 android:layout_width="match_parent" 3 android:layout_height="180dp" 4 android:padding="10dp" 5 android:background="?attr/colorPrimary"> 6 <!--layout_centerInParent 居中设置--> 7 <de.hdodenhof.circleimageview.CircleImageView 8 android:layout_width="70dp" 9 android:layout_height="70dp" 10 android:src="@drawable/k" 11 android:layout_centerInParent="true" 12 /> 13 <TextView 14 android:id="@+id/mail" 15 android:layout_width="wrap_content" 16 android:layout_height="wrap_content" 17 android:layout_alignParentBottom="true" 18 android:text="liuyunlong@qq.com" 19 android:textColor="#fff" 20 android:textSize="14sp" 21 /> 22 <TextView 23 android:id="@+id/username" 24 android:layout_width="wrap_content" 25 android:layout_height="wrap_content" 26 android:layout_above="@+id/mail" 27 android:text="Tom" 28 android:textColor="#fff" 29 android:textSize="14sp" 30 /> 31 </RelativeLayout>
其中我们在background中设置布局的颜色,CirclenImageView使图片圆形化android:layout_centerInParent="true"居中设置,这里设置完成后还要去main.xml中设置将textView换成NavigationView
我们可以看到我们通过menu和headerLayout属性将我们设置的meun和headLayout设置进去,接下来我们去主函数中去设置,先找到navigationView实例,接着通过实例调用setNavigionItemSelectListener监听事件,当用户点击时候就会回调OnNavigationItemSelectedListener,在onNavigationItemSelected()方法中实现响应的逻辑
悬浮按钮 FloatingActionButton,在main.xml中设置
其中bottom|end表示屏幕下方的右侧,end和star类似。在这里面可以添加app:elevation设置映射效果,其中传入的值越大越明显。下面使悬浮按钮可以点击。找到控件,设置点击事件
SnackBar先进的提示工具
利用make设置Snackbar参数,参数1当前页面的view,setAction可以理解为点击事件,但是这种方法有bag它会覆盖掉悬浮按钮,面对这个我们要引入CoordinatorLayout布局,它的用法非常简单将原来的Fram布局替换掉就可以了
cardView是卡片布局非常重要的控件,它是由v7包提供的
cardCornerRadius设置卡片的圆润度。为了丰富屏幕的空间我们要用recyclerview和cardView控件所以添加依赖
设置完后我们早main.xml中添加
下面创建水果实例
下面我们需要创建一个布局CaredView作为最外层的布局文件,因为它只可以有一个子控件所以我们在里面创建了linerLayout布局,在这个布局中设置显示图片和介绍的控件
在主函数中创建一个数组,将我们定义好的图片添加到数组中
写完以后你会看到它将ToolBar覆盖了,那我们怎么解决AppBarLayout就完全可以解决这个问题,将ToolBar控件添加到AppBarlayout中然后在recyclervidew中添加behavior属性,添加appbar_scrolling_view_behaving,这样就解决了。如果我们在Toolbar控件中添加app:layout_scrollFlags="scroll|enterAlways|snap",scroll表示RecyclerView向上滚动toolbar隐藏,向下时出现,snap自动选择隐藏位置。
swiperRefreshLayout是实现刷新的核心
这时候RecyclerView变成了一个子控件,所以要将behavior转到外面去
我们用setOnrefreshListener()设置一个监听事件,initFruits()刷新数据,notifyDataSetChange()表示数据发生变化,我们在setRefreshing中传入fals表示刷新完后关闭进度条
可折叠标题
CollapsingToolbarLayout是作用在Toobar布局之上的它不能单独存在,它作为最外层的布局
下面我们在CollapsingToolbarLayout中定义ImageView和Toolbar,意味着这个高级版的标题栏由普通的标题和图片组成。
接下来修改main.xml
因为NestedScollView中只能有一个子控件,所以添加LinerLayout布局,我们liner中添加卡片和文字
修改FruitAdapter处理RecyclerView的点击事件
我们给CaredView 注册了监听事件