下面我将详细讲解“Android编程实现自定义PopupMenu样式示例【显示图标与设置RadioButton图标】”的完整攻略:
一、自定义PopupMenu样式
- 创建新的布局文件custom_popup_menu.xml以自定义PopupMenu中item的样式。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="?attr/actionBarSize"
android:gravity="center_vertical">
<ImageView
android:id="@+id/icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="16dp"
android:layout_marginRight="16dp" />
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="16sp" />
</LinearLayout>
- 在java代码中创建PopupMenu对象并使用setGravity方法设置其显示位置。
PopupMenu popupMenu = new PopupMenu(MainActivity.this, view, Gravity.END);
- 使用MenuInflater将布局文件custom_popup_menu.xml指定给PopupMenu。
popupMenu.getMenuInflater().inflate(R.menu.popup_menu, popupMenu.getMenu());
这里的R.menu.popup_menu指的是自定义样式中的一个item所对应的menu文件,下面会讲解如何创建。
- 定义PopupMenu中item的点击事件。
popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
// your code here
return true;
}
});
- 最后,使用show方法显示PopupMenu。
popupMenu.show();
二、在自定义PopupMenu中显示图标
- 首先,在custom_popup_menu.xml中添加ImageView并设置其id为icon以用于显示图标。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="?attr/actionBarSize"
android:gravity="center_vertical">
<ImageView
android:id="@+id/icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="16dp"
android:layout_marginRight="16dp" />
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="16sp" />
</LinearLayout>
- 在Menu的menu文件中设置item的图标和标题。
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/menu_item_1"
android:icon="@drawable/ic_menu_item_1"
android:title="@string/menu_item_1_title" />
<item
android:id="@+id/menu_item_2"
android:icon="@drawable/ic_menu_item_2"
android:title="@string/menu_item_2_title" />
<item
android:id="@+id/menu_item_3"
android:icon="@drawable/ic_menu_item_3"
android:title="@string/menu_item_3_title" />
</menu>
- 在java代码中使用Glide库设置ImageView中显示的图标。
MenuAdapter.MenuItemView itemView = (MenuAdapter.MenuItemView) menuView.getChildAt(i);
ImageView icon = itemView.findViewById(R.id.icon);
MenuItem item = getMenu().getItem(i);
String iconUrl = item.getIconUrl();//这里是获取图标的Url,你可以根据实际情况自定义
Glide.with(itemView.getContext())
.load(iconUrl)
.into(icon);
三、在自定义PopupMenu中设置RadioButton图标
- 在custom_popup_menu.xml中添加RadioButton并设置id为radioButton以用于显示选中状态。
<RadioButton xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/radioButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
- 在Menu的menu文件中添加RadioGroup,并设置其中的item为RadioButton。
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<group android:id="@+id/menu_group" android:checkableBehavior="single">
<item
android:id="@+id/menu_item_1"
android:title="@string/menu_item_1_title"/>
<item
android:id="@+id/menu_item_2"
android:title="@string/menu_item_2_title"/>
<item
android:id="@+id/menu_item_3"
android:title="@string/menu_item_3_title"/>
</group>
</menu>
这里的checkableBehavior设置为single以保证只有一个RadioButton被选中。
- 在java代码中设置选中的RadioButton。
popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
MenuInflater inflater = popupMenu.getMenuInflater();
Menu menu = popupMenu.getMenu();
switch (item.getItemId()) {
case R.id.menu_item_1:
RadioButton radioButton1 = menu.findItem(R.id.menu_item_1).getActionView()
.findViewById(R.id.radioButton);
radioButton1.setChecked(true);
break;
case R.id.menu_item_2:
RadioButton radioButton2 = menu.findItem(R.id.menu_item_2).getActionView()
.findViewById(R.id.radioButton);
radioButton2.setChecked(true);
break;
case R.id.menu_item_3:
RadioButton radioButton3 = menu.findItem(R.id.menu_item_3).getActionView()
.findViewById(R.id.radioButton);
radioButton3.setChecked(true);
break;
}
return true;
}
});
这里的findItem方法可以通过item的id获取其对应的MenuItem,再使用getActionView方法获取其布局视图。
以上就是“Android编程实现自定义PopupMenu样式示例【显示图标与设置RadioButton图标】”的完整攻略,希望能对你有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Android编程实现自定义PopupMenu样式示例【显示图标与设置RadioButton图标】 - Python技术站