MaterialDesign的使用
来源:互联网 发布:mac作用是什么 编辑:程序博客网 时间:2024/04/28 22:11
一、MaterialDesign的简介
二.Toolbar
如果要使用Toolbar,一般我们需要隐藏ActionBar。
一般的做法,
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
<style name="AppThemeBase" parent="AppTheme"/>
关于这三个属性代表的是什么,一张图你就清楚了。
xml中
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
/>
android:theme是为了指定toolbar使用深色的主题,但如果toolbar中有弹出菜单时,弹出菜单也会变的深色,所以我们使用淡色的主题;
app:popupTheme是android5.0新增的,它可以兼容5.0以下的系统。
Activity代码
三.DrawerLayout+NavigationView实现侧滑效果
xml如下
<android.support.v4.widget.DrawerLayout
android:id="@+id/drawerlayout"xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
tools:context="com.zyf.drawerlayoutdemo.MainActivity">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="@color/colorPrimary"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:theme="@style/ThemeOverlay.AppCompat.Light"
></android.support.v7.widget.Toolbar>
</FrameLayout>
<android.support.design.widget.NavigationView
android:id="@+id/navigationview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="start"
app:headerLayout="@layout/drawer_head"
app:menu="@menu/drawer_menu">
</android.support.design.widget.NavigationView>
</android.support.v4.widget.DrawerLayout>
head和menu的xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center">
<ImageView
android:id="@+id/ic_head"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/ic_launcher"/>
</LinearLayout>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/info"
android:icon="@mipmap/ic_launcher"
android:title="信息">
</item>
<group android:id="@+id/g2">
<item
android:id="@+id/conllog"
android:title="收藏">
</item>
</group>
</menu>
在NavigationView中还需要添加headerLayout和menu,并且需要设置layout_gravity,只有设置了该属性,才能实现侧滑效果start表示从左侧滑出end则是右侧
Activity中
drawerlayout.openDrawer(GravityCompat.START, true);打开drawerlayout
其实没有太多东西,当你的头布局和你的menu需要交互时,你可以添加一下代码
//获取头布局
View headView = navigationview.getHeaderView(0);
获取到了view自然而然就能获得里面组件了
navigationview.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id.info:
Toast.makeText(getApplicationContext(), "点击:" + item.getTitle(), Toast.LENGTH_SHORT).show();
drawerlayout.closeDrawers();//点击后关闭drawerlayout
break;
}};可以监听到menu里的每一项
四.CoordinatorLayout+AppBarLayout+CollapsingToolbarLayout
activity_main.xml
<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:fitsSystemWindows="true"
tools:context=".MainActivity">
<!--
若想要背景图能够和系统状态栏融合,需要借助android:fitsSystemWindows这个属性
设置为true表示该控件会出现在系统状态栏里,对应我们的程序,那就是ImageView,但是光
设置ImageView是不够的,还需要将它的所有父布局都设置上。
-->
<android.support.design.widget.AppBarLayout
android:id="@+id/appbar"
android:layout_width="match_parent"
android:fitsSystemWindows="true"
android:layout_height="250dp">
<android.support.design.widget.CollapsingToolbarLayout
android:id="@+id/collapsing_toolbar"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:contentScrim="?attr/colorPrimary"
app:layout_scrollFlags="scroll|exitUntilCollapsed"
android:fitsSystemWindows="true"
>
<!--
app:contentScrim="?attr/colorPrimary"表示CollapsingToolbarLayout趋于折叠状态以及折叠之后的背景颜色
app:layout_scrollFlags="scroll|exitUntilCollapsed"scroll表示CollapsingToolbarLayout会像随下面内容的滚动一起滚动,
而exitUntilCollapsed表示滚动完之后保留在界面上
-->
<ImageView
android:id="@+id/image_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="centerCrop"
android:fitsSystemWindows="true"
app:layout_collapseMode="parallax"/>
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:layout_collapseMode="pin">
</android.support.v7.widget.Toolbar>
<!--
pin表示在折叠过程中位置始终保持不变,paralax表示在折叠过程中会产生一定的错位偏移
-->
</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">
<TextView
android:id="@+id/content"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="10dp"/>
</android.support.v4.widget.NestedScrollView>
<android.support.design.widget.FloatingActionButton
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_margin="16dp"
app:layout_anchor="@id/appbar"
app:layout_anchorGravity="bottom|end"
android:src="@mipmap/ic_launcher"/>
</android.support.design.widget.CoordinatorLayout>
折叠式标题栏的实现需要借助于CollapsingToolbarLayout,它是可作用在Toolbar基础之上的布局,但CollapsingToolbarLayout是不能独立存在的,它只能作为AppBarLayout的直接子布局来使用。CoordinatorLayout是一个垂直的LinearLayout,在这里必须要使用CoordinatorLayout才能实现可折叠的状态栏,接着在AppBarLayout中嵌入CollapsingToolbarLayout,我们会设置它的其中一个属性 app:layout_scrollFlags="scroll|exitUntilCollapsed"
scroll表示CollapsingToolbarLayout会像随下面内容的滚动一起滚动,
而exitUntilCollapsed表示滚动完之后保留在界面上
接下来,我们在CollapsingToolbarLayout中添加ImageView和Toolbar分别指定layout_collapseMode属性为parallx和pin,分别表示折叠过程中产生一定的错位和位置固定不变。
再来就是添加NestedScrollView,和ScrollView类似,在这里我们需要指定一个app:layout_behavior="@string/appbar_scrolling_view_behavior"指定了它的文字是在appbar下方。
Activity中的代码
@Bind(R.id.image_view)
ImageView imageView;
@Bind(R.id.toolbar)
Toolbar toolbar;
@Bind(R.id.content)
TextView content;
@Bind(R.id.collapsing_toolbar)
CollapsingToolbarLayout collapsingToolbar;
@Bind(R.id.appbar)
AppBarLayout appbar;
ActionBar actionBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
setSupportActionBar(toolbar);
actionBar = getSupportActionBar();
if (actionBar != null) {
actionBar.setDisplayHomeAsUpEnabled(true);
}
collapsingToolbar.setTitle("name!");
Picasso.with(this).load(R.mipmap.apple).into(imageView);
String fruitContent = generateFruitContent("apple-");
content.setText(fruitContent);
}
private String generateFruitContent(String fruitName) {
StringBuilder fruitContent = new StringBuilder();
for (int i = 0; i < 1000; i++) {
fruitContent.append(fruitName);
}
return fruitContent.toString();
}
}
结果:
<style name="AppThemeBase" parent="AppTheme">
<!--android5.0开始将状态栏颜色设为透明-->
<item name="android:statusBarColor">@android:color/transparent</item>
</style>
</resources>
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
<style name="AppThemeBase" parent="AppTheme"/>
</resources>
五.最后一点,就是DrawerLayout+NavigationView+CollapsingToolbarLayout三个的结合使用。
android:id="@+id/drawerlayout"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:fitsSystemWindows="true"
tools:context=".MainActivity">
<android.support.design.widget.CoordinatorLayout
...
</android.support.design.widget.CoordinatorLayout>
<android.support.design.widget.NavigationView
android:id="@+id/navigationview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="start"
app:headerLayout="@layout/drawer_head"
app:menu="@menu/drawer_menu">
</android.support.design.widget.NavigationView>
</android.support.v4.widget.DrawerLayout>
然后我们只需在activity中初始化设置即可,这里的头布局和menu在二中也已经讲了。
- MaterialDesign的使用
- Android MaterialDesign库的使用
- FloatingActionButtonPlus,一款使用简单的MaterialDesign控件。
- 浅谈MaterialDesign之toolbar的简单使用
- materialdesign下拉刷新控件MaterialRefreshLayout的使用
- Android MaterialDesign控件使用以及RecyclerView,ItemDecoration的基本使用
- MaterialDesign使用总结
- MaterialDesign学习篇(一),MaterialDesign的介绍
- Android 使用MaterialDesign Android Library会出现的问题
- MaterialDesign学习篇(二),Toolbar、DrawerLayout的使用
- MaterialDesign学习篇(三),AppBarLayout、CollapsingToolbarLayout的使用
- MaterialDesign学习篇(五),使用SearchView的正确姿势
- MaterialDesign学习篇(七),CardView卡片式布局的使用
- MaterialDesign的Theme
- MaterialDesign的颜色代码
- MaterialDesign内的组件
- 实现MaterialDesign的EditText
- MaterialDesign 的一些规范
- CSS3的content属性详解
- 自定义View-从0开始
- SVN关联码云使用方法总结
- 图像处理4_使用 metadata-extractor 修改图片名为拍摄时间
- LVS+Keepalive 构建高可用Web应用
- MaterialDesign的使用
- java基本数据结构之List常用实现类总结
- 图像的空间变换
- angualrjs 实现跨域请求几个注意的地方
- sqlmap 详解
- Unity3D放破解反编译。DLL加密,mono解密。全程详解。
- Spring中bean的注入方式
- ajax开发:在ajax请求后台时在请求标头RequestHeader加token
- 蓝桥杯 空心菱形