效果图:
总体都是在AS自带的几个Activity上进行修改,但也遭遇了不少的坑。
侧滑菜单
分割线
不同Group之间会自动添加分割线,布局如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| <?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" tools:showIn="navigation_view">
<group android:id="@+id/grp_application" android:checkableBehavior="single"> <item android:id="@+id/nav_home" android:icon="@drawable/ic_home_black_24dp" android:title="主页" /> <item android:id="@+id/nav_history" android:icon="@drawable/ic_history_black_24dp" android:title="历史" /> <item android:id="@+id/nav_achievement" android:icon="@drawable/ic_stars_black_24dp" android:title="成就" /> </group>
<group android:id="@+id/grp_system" android:checkableBehavior="single"> <item android:id="@+id/nav_settings" android:icon="@drawable/ic_settings_black_24dp" android:title="选项" /> <item android:id="@+id/nav_about" android:icon="@drawable/ic_info_black_24dp" android:title="关于" /> </group>
</menu>
|
按钮图标来源
Google在Github上有material design的图标仓库,内含矢量图和png以及ios可用的多种格式。
登陆界面
登陆界面的模板使用的是ActionBar,我们要手动改成Toolbar。
布局文件中添加:
1 2 3 4 5 6 7 8 9 10 11 12 13
| <android.support.design.widget.AppBarLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:theme="@style/AppTheme.AppBarOverlay">
<android.support.v7.widget.Toolbar android:id="@+id/login_toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:background="?attr/colorPrimary" app:popupTheme="@style/AppTheme.PopupOverlay" />
</android.support.design.widget.AppBarLayout>
|
kt代码中添加:
1 2 3 4
| setSupportActionBar(login_toolbar) //下面两句是启用Toolbar的Up按钮 supportActionBar?.setDisplayHomeAsUpEnabled(true) supportActionBar?.setHomeButtonEnabled(true)
|
Up的按钮的作用理应是:返回该活动的父级活动,有点类似于Windows中的向上操作。
所以是和返回(Back)操作是不同的。
正确的实现方式是在AndroidManifest.xml相应的Activity中添加父布局:
1
| android:parentActivityName=".activities.MainActivity"
|
取消自动打开软键盘
默认情况进入Login Activity,会自动获取第一个输入框的焦点。
显得不方便以及不美观,在AndroidManifest.xml相应的Activity中添加:
1
| android:windowSoftInputMode="stateHidden|stateAlwaysHidden"
|
分割线的实现
使用一个自定义宽高以及颜色的View实现,布局文件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| <android.support.constraint.ConstraintLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="128dp">
<View android:id="@+id/divider_left" android:layout_width="128dp" android:layout_height="1dp" android:background="@android:color/darker_gray" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" />
<TextView android:id="@+id/textView3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginEnd="3dp" android:layout_marginStart="3dp" android:text="@string/login_or" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="@id/divider_right" app:layout_constraintStart_toStartOf="@id/divider_left" app:layout_constraintTop_toTopOf="parent" />
<View android:id="@+id/divider_right" android:layout_width="128dp" android:layout_height="1dp" android:background="@android:color/darker_gray" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintVertical_bias="0.47" />
</android.support.constraint.ConstraintLayout>
|
按钮显示图片
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| <Button android:id="@+id/yiban_sign_in_button" style="?android:textAppearanceSmall" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="16dp" android:layout_marginTop="16dp" android:background="@color/yiban_btn" android:drawableLeft="@drawable/ic_yibanlogo" android:drawablePadding="72dp" android:gravity="center_vertical" android:paddingStart="16dp" android:text="@string/login_viaYiban" android:textColor="@color/white" android:textStyle="bold" />
|
默认似乎是文字在图片之外的空间内居中,而不是在按钮整个宽度居中。
为方便这里微调间距解决,理论上也可以重写Button解决。
默认的ThemeOverlay.AppCompat.Dark.ActionBar
是白色文字+白色水波纹,结果我们的背景色过于浅色,白色水波纹几乎看不见。
修改theme实现
1 2 3
| <style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.ActionBar"> <item name="android:textColorPrimary">@android:color/white</item> </style>
|
参考文章
Material Design之 AppbarLayout 开发实践总结 - 简书
细说 AppbarLayout,如何理解可折叠 Toolbar 的定制 - CSDN博客
玩转AppBarLayout,更酷炫的顶部栏 - 简书
android官方侧滑菜单DrawerLayout详解 - 泡在网上的日子
色彩样式 - Material design 设计指南 - 简书
Material Design颜色表 — HTML颜色代码
Android Toolbar使用系统原生返回键,并改变其颜色,自定义图片替换系统原生返回键 - CSDN博客
怎么使用Toolbar之给Toolbar加上动画 - 简书
如何让所有 View 都可以带上点击的水波纹效果? - V2EX
为什么我的Material Design程序点击时没有波纹扩散效果 - 简书