1.消息提示,如下圖
Toast toast = Toast.makeText(MainActivity.this,
"輸入的信息不合法",
Toast.LENGTH_LONG);
toast.setGravity(Gravity.CENTER,0,0);
toast.show();
2.消息通知Notification
需要的步驟有7步:
-
獲取通知管理器服務
-
創建通知渠道
-
生成渠道 => 讓渠道可以使用createNotificationChannel
-
創建通知構造器
-
設置構造器各項屬性
-
通過通知構造器創建通知
-
發送通知
需要注意的是版本大於26纔可以用含有channel渠道的builder創建方法
private void sendNotification(){
NotificationManager notificationManager = (NotificationManager) getSystemService(
Context.NOTIFICATION_SERVICE);
NotificationChannel channel = null;
Notification.Builder builder;
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
channel = new NotificationChannel("channelId",
"重要的通知渠道",
NotificationManager.IMPORTANCE_LOW);
notificationManager.createNotificationChannel(channel);
builder = new Notification.Builder(this,"channelId");
}else {
builder = new Notification.Builder(this);
}
builder.setSmallIcon(R.drawable.icon)
.setContentTitle("這是通知的標題")
.setContentText("這是通知的內容")
.setLargeIcon(BitmapFactory.decodeResource(getResources(),R.drawable.baidu));
Notification notification = builder.build();
notificationManager.notify(1, notification);
}
3.菜單Menu
菜單分爲兩種
- 選項菜單
- 上下文菜單
選項菜單:只需要重寫兩個方法
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.options_menu, menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()){
case R.id.options1:
Toast.makeText(this,"點擊了選項一",Toast.LENGTH_SHORT).show();
break;
case R.id.options2:
Toast.makeText(this,item.getTitle(),Toast.LENGTH_SHORT).show();
break;
case R.id.sub_options1:
break;
}
return super.onOptionsItemSelected(item);
}
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:title="選項一" android:id="@+id/options1">
<!--選項一的子菜單-->
<menu>
<item android:title="子菜單選項一" android:id="@+id/sub_options1"></item>
<item android:title="子菜單選項二" android:id="@+id/sub_options2"></item>
</menu>
</item>
<item android:title="選項二" android:id="@+id/options2"></item>
<!--給菜單選項分組-->
<group android:id="@+id/group1" android:checkableBehavior="all">
<item android:id="@+id/gro_options1" android:title="分組選項一"></item>
<item android:id="@+id/gro_options2" android:title="分組選項二"></item>
</group>
</menu>
上下文菜單:重下兩個方法併爲其註冊
PS:因爲是上下文菜單,需要某個組件來觸發,例如按住某段信息可以彈出一系列操作(複製粘貼等,所以需要註冊)
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
getMenuInflater().inflate(R.menu.context_menu,menu);
}
@Override
public boolean onContextItemSelected(@NonNull MenuItem item) {
ClipboardManager manager = (ClipboardManager) getSystemService(
Context.CLIPBOARD_SERVICE);
switch (item.getItemId()){
case R.id.copy://複製
String content = tvContent.getText().toString();
ClipData data = ClipData.newPlainText("label",content);
manager.setPrimaryClip(data);
break;
case R.id.paste://粘貼
ClipData pasteData = manager.getPrimaryClip();
String result= pasteData.getItemAt(0).getText().toString();
etContent.setText(result);
break;
}
return super.onContextItemSelected(item);
}
registerForContextMenu(tvContent);
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:title="複製" android:id="@+id/copy"></item>
<item android:title="粘貼" android:id="@+id/paste"></item>
</menu>
附帶一個按鍵觸發方法
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
if ((System.currentTimeMillis() - exitTime) > 2000){
Toast.makeText(this,
"再次點擊返回按鈕退出當前程序",
Toast.LENGTH_SHORT).show();
exitTime = System.currentTimeMillis();
}else {
this.finish();
}
}
return true;
}