长这样
成员变量
PRivate Context context;private ViewGroup rootView;private LinearLayout itemsRootView;private List<String> btnNames;private List<View> itemViews;private MenuDialogOnButtonClickListener clickListener;private boolean selectMode = false;private int selectIndex = -1; // 要勾选的项private int invalidSelectIndex = -1; // 不能勾选的项目private int preSelectIndex = -1; // 之前勾选的项目构造器
public MenuDialog(Context context, List<String> btnNames, MenuDialogOnButtonClickListener listener) { super(context, R.style.dialog_default_style); this.context = context; this.btnNames = btnNames; this.clickListener = listener;}public MenuDialog(Context context, List<String> btnNames, int selectIndex, int invalidSelectIndex, MenuDialogOnButtonClickListener listener) { this(context, btnNames, listener); if (selectIndex >= 0 && selectIndex < btnNames.size()) { this.selectMode = true; this.selectIndex = selectIndex; this.preSelectIndex = selectIndex; this.invalidSelectIndex = invalidSelectIndex; }}接口回调
public interface MenuDialogOnButtonClickListener { public void onButtonClick(final String name);}生命周期及点击回调
@Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); rootView = (ViewGroup) View.inflate(context, R.layout.menu_dialog, null); itemsRootView = (LinearLayout) rootView.findViewById(R.id.menu_dialog_items_root); if (selectMode) { itemViews = new ArrayList<>(); } View itemView; for (int i = 0; i < btnNames.size(); i++) { itemView = View.inflate(context, R.layout.menu_dialog_item, null); ((TextView) itemView.findViewById(R.id.menu_button)).setText(btnNames.get(i)); itemView.setTag(i); itemView.setOnClickListener(this); if (selectMode) { itemViews.add(itemView); } itemsRootView.addView(itemView); } selectItem(); rootView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { dismiss(); } }); setContentView(rootView);}// 撤销最后一次选择,恢复上一次选择public void undoLastSelect() { if (selectMode && preSelectIndex >= 0 && preSelectIndex < btnNames.size()) { selectIndex = preSelectIndex; selectItem(); }}private void selectItem() { if (selectMode == false || selectIndex < 0 || selectIndex >= btnNames.size() || itemViews == null || itemViews .isEmpty()) { return; } View item; for (int i = 0; i < itemViews.size(); i++) { item = itemViews.get(i); item.findViewById(R.id.menu_select_icon).setVisibility(selectIndex == i ? View.VISIBLE : View.GONE); }}@Overridepublic void onClick(View v) { int index = (int) v.getTag(); if (selectMode && index != invalidSelectIndex) { preSelectIndex = selectIndex; selectIndex = index; selectItem(); } String btnName = btnNames.get(index); if (clickListener != null) { clickListener.onButtonClick(btnName); }}布局文件
**menu_dialog_item.xml**<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/menu_button_click_layout"android:layout_width="match_parent"android:layout_height="wrap_content"android:background="@drawable/nim_list_item_selector"android:clickable="true"android:orientation="vertical"><View android:id="@+id/divider_line" style="@style/horizontal_light_thin_divider" android:background="@color/color_b3b3b3" /><TextView android:id="@+id/menu_button" style="@style/dialog_button_text_style" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/divider_line" android:layout_centerHorizontal="true" android:gravity="center" android:text="@string/empty" /><ImageView android:id="@+id/menu_select_icon" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_marginRight="10dip" android:layout_toLeftOf="@id/menu_button" android:background="@drawable/nim_picker_image_selected" android:visibility="gone" />/RelativeLayout>**menu_dialog.xml**<?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="match_parent"android:clickable="true"><LinearLayout android:id="@+id/menu_dialog_items_root" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:background="@color/white" android:orientation="vertical"/></RelativeLayout>风格代码
<style name="dialog_default_style" parent="@android:style/Theme.Dialog"> <item name="android:windowBackground">@color/transparent</item> <item name="android:windowFrame">@null</item> <item name="android:windowNoTitle">true</item> <item name="android:windowIsFloating">true</item> <item name="android:windowIsTranslucent">true</item> <item name="android:backgroundDimEnabled">true</item></style>来一段使用代码
public void showRedTypeDialog(){ List<String> items = new ArrayList<>(); items.add("第一个条目"); items.add("第二个条目"); items.add("关闭"); dialog = new MenuDialog(this, items, new MenuDialog.MenuDialogOnButtonClickListener() { @Override public void onButtonClick(String name) { if (name.equals("第一个条目") { showToast("点击了第一个条目"); }else if (name.equals("第二个条目")){ showToast("点击了第二个条目"); } dialog.dismiss(); } }); dialog.show();}偷学干货,如有侵权,通知立即删除
新闻热点
疑难解答