组合控件——顶部导航栏——溢出菜单OverflowMenu
点击导航栏右边的三点图标,会弹出溢出菜单OverflowMenu,意指导航栏不够放了、溢出来了。
溢出菜单的菜单项也在res\menu下面的XML文件中定义,不同之处是多了个showAsAction属性。该属性用来控制菜单项在导航栏上的展示位置,具体的取值说明见下表。
<menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" > <item android:id="@+id/menu_refresh" android:icon="@drawable/ic_refresh" app:showAsAction="ifRoom" android:title="刷新"/> <item android:id="@+id/menu_about" android:icon="@drawable/ic_about" app:showAsAction="never" android:title="关于"/> <item android:id="@+id/menu_quit" android:icon="@drawable/ic_quit" app:showAsAction="never" android:title="退出"/> </menu>
布局:
<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"> <androidx.appcompat.widget.Toolbar android:id="@+id/tl_head" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@color/blue_light" app:navigationIcon="@drawable/ic_back" /> <LinearLayout android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:orientation="vertical" android:padding="5dp"> <TextView android:id="@+id/tv_desc" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="@color/black" android:textSize="17sp" android:text="该页面演示溢出菜单功能" /> </LinearLayout> </LinearLayout>
<menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" > <item android:id="@+id/menu_refresh" android:icon="@drawable/ic_refresh" app:showAsAction="ifRoom" android:title="刷新"/> <item android:id="@+id/menu_about" android:icon="@drawable/ic_about" app:showAsAction="never" android:title="关于"/> <item android:id="@+id/menu_quit" android:icon="@drawable/ic_quit" app:showAsAction="never" android:title="退出"/> </menu>
日期代码:
package com.example.myapplication.widget; import android.annotation.SuppressLint; import android.text.TextUtils; import java.text.SimpleDateFormat; import java.util.Date; @SuppressLint("SimpleDateFormat") public class DateUtil { // 获取指定格式的日期时间 public static String getNowDateTime(String formatStr) { String format = formatStr; if (TextUtils.isEmpty(format)) { format = "yyyyMMddHHmmss"; } SimpleDateFormat sdf = new SimpleDateFormat(format); return sdf.format(new Date()); } // 获取当前的日期时间 public static String getNowDateTime() { SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss"); return sdf.format(new Date()); } // 获取当前的时间 public static String getNowTime() { SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss"); return sdf.format(new Date()); } }
代码:
package com.example.myapplication; import android.annotation.SuppressLint; import android.graphics.Color; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.TextView; import android.widget.Toast; import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.widget.Toolbar; import com.example.myapplication.widget.DateUtil; @SuppressLint("SetTextI18n") public class MainActivity extends AppCompatActivity { private TextView tv_desc; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Toolbar tl_head = findViewById(R.id.tl_head); // 从布局文件中获取名叫tl_head的工具栏 tl_head.setTitle("溢出菜单页面"); // 设置工具栏的标题文字 tv_desc = findViewById(R.id.tv_desc); } @Override public boolean onCreateOptionsMenu(Menu menu) { // 从menu_overflow.xml中构建菜单界面布局 getMenuInflater().inflate(R.menu.menu_overflow, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { int id = item.getItemId(); // 获取菜单项的编号 if (id == android.R.id.home) { // 点击了工具栏左边的返回箭头 finish(); // 结束当前页面 } else if (id == R.id.menu_refresh) { // 点击了刷新图标 tv_desc.setText("当前刷新时间: " + DateUtil.getNowTime()); } else if (id == R.id.menu_about) { // 点击了关于菜单项 Toast.makeText(this, "这个是工具栏的演示demo", Toast.LENGTH_LONG).show(); } else if (id == R.id.menu_quit) { // 点击了退出菜单项 finish(); // 结束当前页面 } return super.onOptionsItemSelected(item); } }