前言
PopupWindow
在Android开发中,时不时地可能弹出个窗口或者对话框,常用的Android对话框有两种:Dialog和PopupWindow。Dialog是一种非阻塞的对话框,它一般显示图表、标题、文本和按钮;PopupWindow是一种阻塞的对话框,只由外部线程或者PopupWindow本身执行退出操作。
阻塞型对话框:当对话框出现的时候,当前线程暂停。
PopupWindow有点类似于Dialog,相同点在于都是弹出窗口,并且都可以对其进行自定义,同时可以监听窗口里的组件。但它与Dialog又有很大的区别,PopupWindow只是弹出窗口,不会使得宿主Activity组件失去焦点,也就是说PopupWindow弹出后,我们仍然可以与宿主Activity进行交互,Dialog却不能做到这一点。PopupWindow弹出的位置可以有很多,按照有无偏移,可以分为无偏移和偏移两种;按照参数类型不同,又可以分为相对某个控件的位置和父容器内部的相对位置两种。
使用
在Layout中的布局:
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="onOpenPopupWindow"
android:text="打开PopupWindow" />
在Activity中的代码:(说明,activity_main4中放置的是一个自定义的View)
public void onOpenPopupWindow(View view) {
LayoutInflater mLayoutInflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
assert mLayoutInflater != null;
view = mLayoutInflater.inflate(R.layout.activity_main4, null);
popupWindow = new PopupWindow(view,
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.MATCH_PARENT);
popupWindow.setOutsideTouchable(true);
popupWindow.setAnimationStyle(R.style.PopupAnimation);
popupWindow.update();
popupWindow.setTouchable(true);
popupWindow.setFocusable(false);
popupWindow.showAtLocation(view, Gravity.CENTER, 0, 0);
}
PopupMenu
这是一个弹出式的Menu,比PopupWindow简单。
使用
- 设置PopupMenu创建弹出式菜单
在Layout中的布局:
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="createPopupMenu"
android:text="打开PopupMenu" />
/**
* 设置PopupMenu创建弹出式菜单
*/
public void createPopupMenu(View view) {
// 实例化PopupMenu对象
PopupMenu popupMenu = new PopupMenu(this, view);
// 将R.menu.main加载到popupMenu中
getMenuInflater().inflate(R.menu.menu1, popupMenu.getMenu());
// 为popupMenu菜单的菜单项单机时间绑定时间监听器
popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) {
case R.id.add:
Toast.makeText(MainActivity.this, "Add", Toast.LENGTH_SHORT).show();
break;
case R.id.modify:
Toast.makeText(MainActivity.this, "Modify", Toast.LENGTH_SHORT).show();
break;
case R.id.delete:
Toast.makeText(MainActivity.this, "Delete", Toast.LENGTH_SHORT).show();
break;
case R.id.select:
Toast.makeText(MainActivity.this, "Select", Toast.LENGTH_SHORT).show();
break;
default:
break;
}
return true;
}
});
popupMenu.show();
}
menu1.xml的具体内容:
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:context="com.czk.testview.MainActivity">
<item
android:id="@+id/action_settings"
android:icon="@android:drawable/ic_menu_add"
android:orderInCategory="100"
android:title="@string/action_settings" >
<menu>
<item
android:icon="@android:drawable/ic_menu_add"
android:id="@+id/add"
android:orderInCategory="100"
android:showAsAction="always"
android:title="Add" />
<item
android:icon="@android:drawable/ic_menu_add"
android:orderInCategory="100"
android:id="@+id/delete"
android:showAsAction="always"
android:title="Delete" />
<item
android:icon="@android:drawable/ic_menu_add"
android:id="@+id/modify"
android:orderInCategory="100"
android:showAsAction="always"
android:title="Modify" />
<item
android:icon="@android:drawable/ic_menu_add"
android:orderInCategory="100"
android:showAsAction="always"
android:id="@+id/select"
android:title="Select" />
</menu>
</item>
<item
android:id="@+id/Add"
android:icon="@drawable/ic_launcher"
android:orderInCategory="100"
android:showAsAction="collapseActionView"
android:title="About" />
</menu>
本文详细介绍了Android开发中PopupWindow和PopupMenu的使用方法。PopupWindow可根据需求自定义弹出位置,而PopupMenu则用于创建简单的弹出式菜单。两者均可通过代码实现丰富的交互效果。
403

被折叠的 条评论
为什么被折叠?



