Android新组件CoordinatorLayout协调布局的使用,结合TabLayout,结合DrawerLayout
来源:互联网 发布:淘宝大v认证运营故事 编辑:程序博客网 时间:2024/04/27 14:44
偶尔的一次忘记是在哪里了,看到的效果,Toolbar可以折叠,拉下来是正常的ui,但是向上推这个正常的视图就变为了Toolbar,看到之后自己就开始各种找,记得那时候是2015年的9月份左右,网上也没有,搜demo也没有,没办法只能自己琢磨了,还记得第一次使用的时候,各种报错,各种视图叠加在一起,属实折腾了自己一段时间。之后效果做出来了,但是整个界面不能只有一个折叠的Toolbar啊,于是开始搞各种结合使用,listview什么的就不说了,不支持listview,换成recylerView就会没有那么多的冲突,我分享一下如何与DrawerLayout和TabLayout结合使用吧! 时刻记住一个点就可以了 ,要为其余组件设置behavior就可以!
下面先简单的介绍一下CoordinatorLayout这个组件,根据自己程序猿的翻译,应该是译为 协调布局,是谷歌推出的M包里的组件。首先,要使用CoordinatorLayout这个组件,在Android Studio中添加依赖:
compile 'com.android.support:design:23.0.1'
根据API中的介绍:
它的父类是ViewGroup,是作为一个容器来使用的,有没有小伙伴去自己的api中查询了,是不是没有啊!要下6.0的才会有哦!
上面的是关于它的介绍,翻译过来的大概的意思是:
1. CoordinatorLayout是一个超级FrameLayout,这里就可以知道它里面装载的childView是如何排列的了
2. 它是一个特别高级的很炫酷的app装饰布局
3. 可以为一个或者更多的子视图提供相互作用,话说当时看这个我也为老美的说话逻辑感到闹心,这都是什么意思?但是使用之后就会明白了,作为一个协调布局,可以为它的子视图之间提供相互作用,来实现协调每个子视图!
下面那一大堆xafwfawfawf大概的意思就是 Beahviors,这个最重要了,为子视图添加行为,例如添加可滑动的行为,之后就可以折叠滑动了,下面会介绍how to do!
下面看一下我download下来的效果图吧!
看到了效果图,是不是也想要自己做一个呢,下面开始介绍如何使用吧!
我会详细的说一下如何使用CoordinatorLayout,之后与TabLayout和DrawerLayout结合使用的就不多说了,其实就是如何在布局中调整位置
CoordinatorLayout使用:
<?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.design.widget.CollapsingToolbarLayout android:layout_width="match_parent" android:layout_height="match_parent" app:contentScrim="@color/theme_color" app:layout_scrollFlags="scroll|exitUntilCollapsed" app:title="测试"> <ImageView android:layout_width="match_parent" android:layout_height="350dp" android:scaleType="fitXY" android:src="@mipmap/tab1_pressed" /> <android.support.v7.widget.Toolbar android:id="@+id/tool_bar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" app:layout_collapseMode="pin" app:popupTheme="@style/ThemeOverlay.AppCompat.Light" /> </android.support.design.widget.CollapsingToolbarLayout> </android.support.design.widget.AppBarLayout> <android.support.v4.widget.NestedScrollView android:layout_width="match_parent" android:layout_height="wrap_content" app:layout_behavior="@string/appbar_scrolling_view_behavior"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <Button android:id="@+id/open_drawer" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="阿飞瓦房" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="阿飞瓦房" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="阿飞瓦房" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="阿飞瓦房" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="阿飞瓦房" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="阿飞瓦房" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="阿飞瓦房" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="阿飞瓦房" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="阿飞瓦房" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="阿飞瓦房" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="阿飞瓦房" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="阿飞瓦房" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="阿飞瓦房" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="阿飞瓦房" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="阿飞瓦房" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="阿飞瓦房" /> </LinearLayout> </android.support.v4.widget.NestedScrollView></android.support.design.widget.CoordinatorLayout>
由于CoordinatorLayout是一个容器,所以我将它放在了最外层
之后放置了一个AppBarLayout,装载的是Toolbar部分
之后放置了一个NestedScrollView,该组件装载Toolbar下方的组件,这样才可以是toolbar可以折叠滑动!
AppbarLayout:是一个垂直的线性布局,看它的api中的英文介绍!是不是需要我翻译一下呢!
想要appbar可以卷动,就要使用AppbarLayout,
它的一个很重要的属性:app:layout_scrollFlags
该属性有4个参数,分别是:
1.scroll:可以让view滚动出屏幕,如果没有设置该参数,视图滚动完毕后会停留在屏幕顶端
2.enterAlways:只要向下滑动,就可以让view可见,用于快速滚动,只要滚动了就会快速的做出view显示的响应
3.enterAlwaysCollapsed:使要滚动折叠的视图可以卷动,可以扩大
4.exitUntilCollapsed:退出屏幕,折叠之后显示在顶端
设置完毕后,toolbar可以滚动,折叠完成之后显示在顶端,向下拉可以显示内容
之后使用了CollapsingToolbarLayout
它的父类是帧布局,可以让toolbar拉伸打开时显示的内容多样化,设置例如imageview,textview,button之类的使内容更丰富
使用该组件主要是使用如下属性:
1.title:当toolbar拉伸到上方时,显示的内容
2.contentScrim:显示在上方作为toolbar时的颜色,参数为十六进制颜色值
我常用的就这两个,他还有一些其余属性,有需要可以去api中查看
最后,为了使toolbar可以折叠滑动,总结一下:
1.首先,容器必须是CoordinatorLayout
2.设置属性layout_scrollFlags
3.toolbar下方必须有支持滑动的组件,之后为其设置behavior:
@string/appbar_scrolling_view_behavior
如此实现了效果如下图所示
下面上传两个和TabLayout与抽屉结合使用的布局:
采用的是toolbar+drawerlayout的实现方法,但是始终无法实现drawerlayout不遮挡toolbar,无法让抽屉显示在toolbar下方,如果哪位大神看到了这句,有好办法,请告知!非常非常感谢!
布局如图:
<?xml version="1.0" encoding="utf-8"?><LinearLayout 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:orientation="vertical"> <android.support.v4.widget.DrawerLayout android:id="@+id/drawer_layout" android:layout_width="match_parent" android:layout_height="match_parent"> <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.design.widget.CollapsingToolbarLayout android:layout_width="match_parent" android:layout_height="match_parent" app:contentScrim="@color/theme_color" app:layout_scrollFlags="scroll|exitUntilCollapsed" app:title="测试"> <ImageView android:layout_width="match_parent" android:layout_height="350dp" android:scaleType="fitXY" android:src="@mipmap/tab1_pressed" /> <android.support.v7.widget.Toolbar android:id="@+id/tool_bar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" app:layout_collapseMode="pin" app:popupTheme="@style/ThemeOverlay.AppCompat.Light" /> </android.support.design.widget.CollapsingToolbarLayout> </android.support.design.widget.AppBarLayout> <android.support.v4.widget.NestedScrollView android:layout_width="match_parent" android:layout_height="wrap_content" app:layout_behavior="@string/appbar_scrolling_view_behavior"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <Button android:id="@+id/open_drawer" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="阿飞瓦房" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="阿飞瓦房" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="阿飞瓦房" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="阿飞瓦房" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="阿飞瓦房" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="阿飞瓦房" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="阿飞瓦房" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="阿飞瓦房" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="阿飞瓦房" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="阿飞瓦房" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="阿飞瓦房" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="阿飞瓦房" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="阿飞瓦房" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="阿飞瓦房" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="阿飞瓦房" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="阿飞瓦房" /> </LinearLayout> </android.support.v4.widget.NestedScrollView> </android.support.design.widget.CoordinatorLayout> <!-- 抽屉内容 --> <LinearLayout android:id="@+id/drawer_view" android:layout_width="200dp" android:layout_height="match_parent" android:layout_gravity="left" android:background="@color/theme_color" android:orientation="vertical"> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="测试" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="测试" /> </LinearLayout> </android.support.v4.widget.DrawerLayout></LinearLayout>
代码:
import android.support.v4.widget.DrawerLayout;import android.support.v7.app.ActionBarActivity;import android.support.v7.app.ActionBarDrawerToggle;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.support.v7.widget.Toolbar;import android.view.View;import android.widget.Button;import android.widget.LinearLayout;public class MainActivity extends AppCompatActivity { private Toolbar toolbar; private ActionBarDrawerToggle drawerToggle; private DrawerLayout drawerLayout; private LinearLayout drawerView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); drawerView = (LinearLayout) findViewById(R.id.drawer_view); toolbar = (Toolbar) findViewById(R.id.tool_bar); toolbar.setTitle("测试"); setSupportActionBar(toolbar); // 设置返回键可用 getSupportActionBar().setHomeButtonEnabled(true); getSupportActionBar().setDisplayHomeAsUpEnabled(true); drawerToggle = new ActionBarDrawerToggle(MainActivity.this, drawerLayout, toolbar, R.string.open, R.string.close); drawerToggle.syncState(); drawerLayout.setDrawerListener(drawerToggle); Button btn = (Button) findViewById(R.id.open_drawer); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { drawerLayout.openDrawer(drawerView); } }); }}
下面是结合viewpager使用的,
<?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:id="@+id/singer_root_view" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true"> <android.support.design.widget.AppBarLayout android:id="@+id/singer_appbar" android:layout_width="match_parent" android:layout_height="wrap_content" android:fitsSystemWindows="true"> <android.support.design.widget.CollapsingToolbarLayout xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/singer_cool_title" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true" app:contentScrim="@color/theme_bg_color" app:expandedTitleMarginEnd="30dp" app:expandedTitleMarginStart="30dp" app:layout_scrollFlags="scroll|exitUntilCollapsed" app:title="每日推荐"> <ImageView android:id="@+id/singer_topbar_iv" android:layout_width="match_parent" android:layout_height="260dp" android:fitsSystemWindows="true" android:scaleType="fitXY" android:src="@mipmap/b" app:layout_collapseMode="parallax" app:layout_collapseParallaxMultiplier="0.7" /> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" app:layout_collapseMode="pin" app:popupTheme="@style/ThemeOverlay.AppCompat.Light" /> </android.support.design.widget.CollapsingToolbarLayout> <com.wu.dateba.widget.ViewPagerIndicator android:id="@+id/singer_tablayout" android:layout_width="match_parent" android:layout_height="42dp" android:orientation="horizontal" app:item_count="2" android:background="@drawable/player_bg_color" app:layout_behavior="@string/appbar_scrolling_view_behavior" /> </android.support.design.widget.AppBarLayout> <android.support.v4.view.ViewPager android:id="@+id/singer_viewpager" android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior" /></android.support.design.widget.CoordinatorLayout>
上方的viewpagerIndicator可以替换为tabLayout!实现了上方toolbar可以拉伸,下面显示的是viewpager+tablayout
最后源码下载:
http://download.csdn.net/detail/wubihang/9402101
- Android新组件CoordinatorLayout协调布局的使用,结合TabLayout,结合DrawerLayout
- TabLayout和DrawerLayout结合使用
- Android中CoordinatorLayout(协调布局)的使用
- CoordinatorLayout 、FloatingActionButton 、Snackbar、DrawerLayout和NavigationView结合使用demo
- TabLayout结合ViewPager的使用
- Android 5.0新控件 CoordinatorLayout | 协调布局 介绍及使用详情
- android中CoordinatorLayout结合TollBar自定义View的使用效果
- android开发--drawerLayout和toolbar的结合使用
- recyclerview,AppBarLayout,Toolbar,CoordinatorLayout 的结合使用~
- Android中TabLayout和ViewPager的结合使用
- android关于TabLayout+ViewPager结合使用的小Demo
- Android中TabLayout和ViewPager的结合使用
- TabLayout的基本使用结合Viewpager(Android开发)
- TabLayout结合ViewPager使用
- tablayout结合viewPager使用
- CoordinatorLayout 协调者布局的简单使用1
- 简单DrawerLayout与ActionBar的结合使用
- Tablayout与ViewPager的结合使用
- UILabel的使用及常用属性的设置
- (转)Android10_Intent及其七大属性及intent-filter设置
- 【转】SSH 协议与OpenSSH详解
- HP-Unix Top命令总结
- Lucene索引,查询及高亮显示
- Android新组件CoordinatorLayout协调布局的使用,结合TabLayout,结合DrawerLayout
- FLV文件格式解析
- ionic对话框
- 模拟器完美运行,真机测试报错
- MAC sublime text 编译 LUA
- layout_weight=1与wrap_content的使用
- Linux 端口管理
- C#源代码—演示抽象类与抽象属性的使用,命名空间的使用
- iOS UIDynamic动画