下面我将详细讲解“Android开发技巧之我的菜单我做主(自定义菜单)”的完整攻略。
1. 确定需求和设计菜单样式
在进行自定义菜单开发之前,我们需要确定自己的需求并设计出菜单的样式。根据需求和样式设计,我们可以选择使用 PopupMenu 或者自定义 PopupWindow 实现菜单。
2. 实现 PopupMenu
2.1 引入支持包
在使用 PopupMenu 之前,我们需要在项目中引入 Android 支持库。
implementation 'com.android.support:appcompat-v7:28.0.0'
2.2 引入资源文件
在 values 目录下创建 menu 文件,并在其中定义菜单项。
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:title="剪切"
android:id="@+id/action_cut" />
<item
android:title="复制"
android:id="@+id/action_copy" />
<item
android:title="粘贴"
android:id="@+id/action_paste" />
</menu>
2.3 引入 PopupMenu
在代码中使用 PopupMenu 并设置点击事件。
PopupMenu popupMenu = new PopupMenu(this, view);
MenuInflater inflater = popupMenu.getMenuInflater();
inflater.inflate(R.menu.popup_menu, popupMenu.getMenu());
popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_cut:
// 执行剪切操作
break;
case R.id.action_copy:
// 执行复制操作
break;
case R.id.action_paste:
// 执行粘贴操作
break;
}
return true;
}
});
popupMenu.show();
3. 实现自定义 PopupWindow
3.1 定义菜单项
在自定义 PopupWindow 中,我们需要定义菜单项布局,并在其中定义操作。
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="8dp">
<ImageView
android:id="@+id/action_cut"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_cut"
android:layout_gravity="center_vertical"
android:layout_marginEnd="8dp"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="剪切"
android:textSize="16sp"
android:textColor="@color/colorPrimary"
android:layout_gravity="center_vertical"/>
</LinearLayout>
3.2 引入 PopupWindow
在代码中创建自定义 PopupWindow 并设置菜单项点击事件。
View menuView = getLayoutInflater().inflate(R.layout.menu_layout, null);
final PopupWindow popupWindow = new PopupWindow(menuView, LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
popupWindow.setOutsideTouchable(true);
popupWindow.setFocusable(true);
popupWindow.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
ImageView cutView = menuView.findViewById(R.id.action_cut);
cutView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// 执行剪切操作
popupWindow.dismiss();
}
});
TextView copyView = menuView.findViewById(R.id.action_copy);
copyView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// 执行复制操作
popupWindow.dismiss();
}
});
TextView pasteView = menuView.findViewById(R.id.action_paste);
pasteView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// 执行粘贴操作
popupWindow.dismiss();
}
});
popupWindow.showAsDropDown(view);
4. 示例说明
4.1 示例一
在一个文本编辑器应用中,用户需要在输入框中粘贴文本、复制文本、剪切文本,我们可以使用 PopupMenu 实现菜单,用户通过点击 EditText 旁的菜单按钮打开 PopupMenu,并选择对应操作的菜单项。
4.2 示例二
在一个图片浏览器应用中,用户需要将图片复制到剪贴板或者分享给其他应用,我们可以使用自定义 PopupWindow 实现菜单,用户通过点击图片上的按钮打开 PopupWindow,并选择对应操作的菜单项。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Android开发技巧之我的菜单我做主(自定义菜单) - Python技术站