Android P:BottomAppBar和MaterialButton
Android P开发人员预览版现已公开发布。
在本教程中,我们将研究两个有趣的组件:支持库v28附带的BottomAppBar和MaterialButton,它们是更新的Material Design的一部分。
如果您尚未将Android Studio和AVD模拟器更新为Android P,请按照以下步骤进行操作。
将Android Studio更新到SDK 28
转到工具| SDK Manager,然后下载Android P Developer预览版(或者稳定的版本,以最新可用的版本为准!)。
从SDK Manager中的" SDK构建工具"选项卡安装最新的构建工具(28.0.0或者更高版本)。
现在在模拟器上运行Android P目标代码。
AVD Manager并安装最新的Android P系统镜像以创建模拟器。
现在创建一个新的Android Studio项目,并将目标SDK版本设置为Android:28(android-p)。
在您应用的build.gradle中添加以下库。
implementation 'com.android.support:appcompat-v7:28.0.0-alpha1' implementation 'com.android.support:design:28.0.0-alpha1' implementation 'com.android.support:support-v4:28.0.0-alpha1'
您的build.gradle应该如下所示:
现在,我们准备实现Android支持v28附带的BottomAppBar和MaterialButton。
在开始之前,让我们看看它们是如何定义的。
Android BottomAppBar
BottomAppBar扩展了工具列,并在屏幕底部定义。
它带有一个半圆形的切口,用于连接附加的FloatingActionButton。
像这样:
我们可以在BottomAppBar中设置FloatingActionButton的直径和位置。
通过以下方式在XML中定义BottomAppbar:
<android.support.design.bottomappbar.BottomAppBar android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="bottom" app:fabAttached="true" app:backgroundTint="@color/colorPrimary" app:popupTheme="@style/ThemeOverlay.AppCompat.Light" app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
app:fabAttached =" true"用于附加FloatingActionButton。
在FloatingActionButton中,您必须将app:layout_anchor设置为BottomAppBar ID。
此外,您可以设置以下属性:app:fabAlignmentMode:设置FloatingActionButton在BottomAppBar中的位置。
默认情况下,它居中。app:fabCradleDiameter:设置切口弧的直径。
app:fabCradleVerticalOffset:设置FloatingActionButton与圆弧切除的垂直距离。
app:menu用于设置菜单资源文件。
您也可以通过编程方式进行。
您必须使用bottomAppbar.replaceMenu()在BottomAppBar上设置菜单。
否则,将不会显示BottomAppbar。
将FAB放置在BottomAppBar的中间而不显示弧线。
<android.support.design.bottomappbar.BottomAppBar
android:id="@+id/bottom_appbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
app:fabAttached="true"
app:backgroundTint="@color/colorPrimary"
app:fabCradleDiameter="8dp"
app:fabCradleVerticalOffset="4dp"
Android MaterialButton
MaterialButton是Button上的新Material Design主题。
它扩展了AppCompatButton。
它直接提供了材质主题,而无需添加样式/主题。
要定义MaterialButton,我们要做:
<android.support.design.button.MaterialButton
android:id="@+id/materialButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="18dp"
android:layout_gravity="center"
android:textColor="#fff"
android:text="Material Button"
app:backgroundTint="@color/colorPrimary"
默认情况下,背景颜色与" colorAccent"相同。
app:backgroundTint用于设置新颜色。
app:icon除了按钮文本外,还用于设置可绘制的图标。
app:iconTint用于设置图标的颜色。
app:iconPadding设置填充。
app:rippleColor`:用于在单击按钮时设置波纹颜色。
app:strokeColor`:用于设置按钮的边框颜色。
app:strokeWidth:用于设置边框的宽度。
app:cornerRadius用于设置拐角处的半径。
现在,我们来构建我们的应用程序,在这里我们将同时使用BottomAppBar和MaterialButton。
Android BottomAppBar MaterialButton代码
下面给出了activity_main.xml布局文件的代码:
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:app="https://schemas.android.com/apk/res-auto"
xmlns:tools="https://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<android.support.design.bottomappbar.BottomAppBar
android:id="@+id/bottom_appbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
app:fabAttached="true"
app:backgroundTint="@color/colorPrimary"
app:fabCradleVerticalOffset="12dp"
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|center_horizontal"
android:src="@android:drawable/ic_dialog_email"
app:layout_anchor="@+id/bottom_appbar"
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.design.button.MaterialButton
android:id="@+id/materialButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="18dp"
android:gravity="center_vertical"
android:layout_gravity="center"
app:icon="@android:drawable/ic_input_get"
app:iconTint="@android:color/holo_red_dark"
app:rippleColor="@color/colorAccent"
app:strokeColor="@android:color/holo_green_dark"
app:strokeWidth="3dp"
android:textColor="#fff"
android:text="Toggle FAB Position"
app:backgroundTint="@color/colorPrimary"
</FrameLayout>
</android.support.design.widget.CoordinatorLayout>
如果尚未创建菜单资源目录,请立即创建。
右键单击res |新目录。
将其命名为"菜单"。
在目录中创建新的菜单文件。
下面给出了" my_menu.xml"文件的代码:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:app="https://schemas.android.com/apk/res-auto">
<item
android:id="@+id/next_btn"
android:checked="true"
android:icon="@android:drawable/ic_input_add"
android:title="Item"
app:showAsAction="ifRoom"
<item
android:id="@+id/action_settings"
android:title="Settings"
</menu>
MainActivity.java类的代码如下:
package com.theitroad.android28;
import android.os.Bundle;
import android.support.design.bottomappbar.BottomAppBar;
import android.support.design.button.MaterialButton;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
public class MainActivity extends AppCompatActivity {
BottomAppBar bottomAppBar;
MaterialButton materialButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bottomAppBar = findViewById(R.id.bottom_appbar);
materialButton = findViewById(R.id.materialButton);
bottomAppBar.replaceMenu(R.menu.my_menu);
materialButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (bottomAppBar.getFabAlignmentMode() == BottomAppBar.FAB_ALIGNMENT_MODE_CENTER)
bottomAppBar.setFabAlignmentMode(BottomAppBar.FAB_ALIGNMENT_MODE_END);
else {
bottomAppBar.setFabAlignmentMode(BottomAppBar.FAB_ALIGNMENT_MODE_CENTER);
}
}
});
}
}
bottomAppBar.replaceMenu()用于设置BottomAppBar中的菜单项。
单击MaterialButton时,我们相对于BottomAppBar切换FAB位置。

