当前位置: 首页 > news >正文

Android开发-java版:Material Design

一、Toolbar

1.去除系统自动标题栏

在以下路径中找到两个themes.xml文件:{项目名}\app\src\main\res\values\themes.xml

将style中的DarkActionBar改为NoActionBar

<style name="Theme.MaterialDesign" parent="Theme.MaterialComponents.DayNight.NoActionBar">

2.在主活动布局文件中创建toolbar

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:id="@+id/main"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><androidx.appcompat.widget.Toolbarandroid:id="@+id/toolbar"android:layout_width="match_parent"android:layout_height="?attr/actionBarSize"android:background="@color/black"android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"app:popupTheme="@style/ThemeOverlay.AppCompat.Light" /></FrameLayout>

3.创建menu资源文件夹,在menu下创建toolbar.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"><itemandroid:id="@+id/xiaoxi"android:icon="@drawable/xiaoxi"android:title="Backup"app:showAsAction="always"/><itemandroid:id="@+id/guoqi"android:icon="@drawable/guoqi"android:title="Delete"app:showAsAction="ifRoom"/></menu>

4.修改主活动文件

public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);setSupportActionBar(toolbar);}public boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.toolbar, menu);return true;}public boolean onOptionsItemSelected(MenuItem item) {if(R.id.xiaoxi == item.getItemId()){Toast.makeText(this,"B",Toast.LENGTH_SHORT).show();}else if(R.id.guoqi == item.getItemId()){Toast.makeText(this,"D",Toast.LENGTH_SHORT).show();}return true;}
}

二、DrawerLayout

1.修改主活动的布局文件

使用androidx.drawerlayout.widget.DrawerLayout

第一个子控件是主屏幕显示的内容,第二个子控件是滑动菜单中显示的内容

<?xml version="1.0" encoding="utf-8"?>
<androidx.drawerlayout.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:id="@+id/main"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><FrameLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"><androidx.appcompat.widget.Toolbarandroid:id="@+id/toolbar"android:layout_width="match_parent"android:layout_height="?attr/actionBarSize"android:background="@color/black"android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"app:popupTheme="@style/ThemeOverlay.AppCompat.Light" /></FrameLayout><TextViewandroid:layout_width="match_parent"android:layout_height="match_parent"android:layout_gravity="start"android:text="Menu"android:textSize="30sp"android:background="#FFF"/></androidx.drawerlayout.widget.DrawerLayout>

2.修改主活动文件

1. DrawerLayout 声明

private DrawerLayout drawerLayout;
  • 声明一个 DrawerLayout 类型的成员变量

  • DrawerLayout 是 Android Support 库中实现侧滑菜单的布局容器

2. 初始化 DrawerLayout

drawerLayout = (DrawerLayout) findViewById(R.id.main);
  • 通过 findViewById(R.id.main) 获取布局文件中定义的 DrawerLayout

  • 这里假设布局文件中有一个 ID 为 main 的 DrawerLayout

3. 设置导航按钮

ActionBar actionBar = getSupportActionBar();
if(actionBar != null){actionBar.setDisplayHomeAsUpEnabled(true);      // 显示返回/菜单图标actionBar.setHomeAsUpIndicator(R.drawable.xiaoxi); // 设置自定义图标
}
  • setDisplayHomeAsUpEnabled(true):在 ActionBar 左侧显示导航图标

  • setHomeAsUpIndicator(R.drawable.xiaoxi):将默认图标替换为自定义图标

4. 处理导航按钮点击事件

public boolean onOptionsItemSelected(MenuItem item) {// ... 其他菜单项处理 ...else if(android.R.id.home == item.getItemId()){  // 点击导航按钮drawerLayout.openDrawer(GravityCompat.START);  // 打开侧滑菜单}return true;
}
  • android.R.id.home:系统定义的导航按钮 ID

  • drawerLayout.openDrawer(GravityCompat.START):从左侧打开侧滑菜单

三、NavigationView

用于优化滑动菜单页面

1.创建文件

分别创建一个menu/nav_menu和layout/nav_header的xml文件

nav_menu代码如下:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"><group android:checkableBehavior="single"><itemandroid:id="@+id/nav_call"android:icon="@drawable/xiaoxi"android:title="Call"/><itemandroid:id="@+id/nav_friends"android:icon="@drawable/xiaoxi"android:title="Friends"/><itemandroid:id="@+id/nav_location"android:icon="@drawable/xiaoxi"android:title="Location"/><itemandroid:id="@+id/nav_mail"android:icon="@drawable/xiaoxi"android:title="Mail"/><itemandroid:id="@+id/nav_task"android:icon="@drawable/xiaoxi"android:title="Task"/></group></menu>

nav_header代码如下:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="100dp"android:padding="10dp"android:background="?attr/colorPrimary"><ImageViewandroid:id="@+id/image"android:layout_width="70dp"android:layout_height="70dp"android:src="@drawable/ic_launcher_background"android:layout_centerInParent="true"/><TextViewandroid:id="@+id/username"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentBottom="true"android:text="tangjunhui@gmail.com"android:textColor="#FFF"android:textSize="14sp"/><TextViewandroid:id="@+id/mail"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_above="@id/username"android:text="Jack"android:textColor="#FFF"android:textSize="14sp"/></RelativeLayout>

2.修改主活动布局文件

在主活动布局文件中,用NavigationView控件替换之前所写的菜单显示的内容

可以传入两个值将nav_menu和nav_header俩个文件结合

<com.google.android.material.navigation.NavigationViewandroid:id="@+id/nav_view"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_gravity="start"app:menu="@menu/nav_menu"app:headerLayout="@layout/nav_header"/>

3.在主活动文件中监听点击事件

完整代码如下:

public class MainActivity extends AppCompatActivity {private DrawerLayout drawerLayout;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);setSupportActionBar(toolbar);drawerLayout = (DrawerLayout) findViewById(R.id.main);ActionBar actionBar = getSupportActionBar();if(actionBar != null){actionBar.setDisplayHomeAsUpEnabled(true);actionBar.setHomeAsUpIndicator(R.drawable.xiaoxi);}NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);navigationView.setCheckedItem(R.id.nav_call);navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {@Overridepublic boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {drawerLayout.closeDrawers();return false;}});}public boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.toolbar, menu);return true;}public boolean onOptionsItemSelected(MenuItem item) {if(R.id.xiaoxi == item.getItemId()){Toast.makeText(this,"B",Toast.LENGTH_SHORT).show();}else if(R.id.guoqi == item.getItemId()){Toast.makeText(this,"D",Toast.LENGTH_SHORT).show();}else if(android.R.id.home == item.getItemId()){drawerLayout.openDrawer(GravityCompat.START);}return true;}
}

四、FloatingActionButton

用来实现悬浮效果

app:elevation给定悬浮的高度值,高度越高阴影越大

<com.google.android.material.floatingactionbutton.FloatingActionButtonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="bottom|end"android:layout_margin="16dp"android:src="@mipmap/ic_launcher"app:elevation="20dp" />

五、Snackbar

我们为刚刚的悬浮按钮添加点击事件,使用Snackbar

Snackbar是Material Design中提供的更先进的提示方法,区别于Toast

特性SnackbarToast
出现位置屏幕底部屏幕任意位置(通常底部)
用户交互✅ 可交互(可包含操作按钮)❌ 不可交互
自动消失时间可设置(默认较短)固定(LENGTH_SHORT/LONG)
显示上下文附着在特定 View 上全局显示,与具体 View 无关
消失方式自动消失  用户滑动消失只能自动消失
Material Design✅ 是 Material Design 组件❌ 不是
父类依赖需要 CoordinatorLayout 实现高级功能无特殊依赖
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);fab.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Snackbar.make(v,"Data deleted",Snackbar.LENGTH_SHORT).setAction("UNDO", new View.OnClickListener() {@Overridepublic void onClick(View v) {Toast.makeText(MainActivity.this,"Data restored",Toast.LENGTH_SHORT).show();}}).show();}});

六、CoordinatorLayout

上述代码运行时弹出的Snackbar会遮挡悬浮按钮

我们可以将主活动布局文件中的<FrameLayout>替换为<CoordinatorLayout>即可

CoordinatorLayout会自动检测弹出位置,并自动偏移悬浮按钮

http://www.dtcms.com/a/615087.html

相关文章:

  • Python求解随机矩阵的特征值和特征向量
  • 做珠宝商城网站做网站流程 优帮云
  • 定制类做网站多少钱wordpress修改关键字
  • 免费资料网站网址下载锦州建设信息网站
  • 驻马店网站开发公司单页网站程序
  • 个人博客网站设计钢筋网片价格
  • C语言编译计算器 | 基于C语言的计算器编程与优化实现
  • 为什么用Vue做网站的很少网站开发重点难点
  • 现在还有做系统的网站吗怎么才能免费建网站
  • APP离线功能开发:数据缓存、离线提交与网络恢复同步方案
  • 定制手机网站开发wordpress会员到期
  • 外贸网站如何seo推广样asp.net做网站
  • 公司网站建设注册免费网站制作多少钱
  • 现代中国地理空间数据库
  • 长沙制作网页网站地方网站改版方案
  • 《道德经》第五十九章
  • RDMA通信---对比传统socket通信的优势
  • 广东三网合一网站建设报价网站数据库有哪些
  • 辽宁省住房城乡建设厅网站网页图片不能保存怎么破解
  • VS2022添加c++20
  • 易语言做钓鱼网站资阳seo快速排名
  • 网站网站开发建设定制高端网站
  • 企业网站开发目的和意义如何建立网站详细流程
  • 你的电视 2.2.5 | 功能丰富的直播软件,提供广泛的频道选择,满足全家人的娱乐需求
  • 广州网站建设商phpcms 后台修改修改网站备案号
  • dw网站模板怎么开发自己的个人网页
  • 红酒网站制作wordpress演示版
  • 电子商务型网站西安建筑网站建设
  • geohash入门指南
  • 二叉树的拓展:平衡二叉树(定义,朴素c语言实现增删改查,平衡因子判断)通俗易懂