我想要一个弹出式下拉菜单,其中的图标是从操作栏中的按钮打开的(costumized overflow菜单)。
因此,我为MenuItem
ActionView
添加OnClickListener
,并在其View
下打开弹出窗口作为下拉菜单。
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main, menu);
MenuItem item = menu.findItem(R.id.action_settings);
item.setActionView(R.layout.menu_overflow);
item.expandActionView();
final View vs = (View) menu.findItem(R.id.action_settings).getActionView();
vs.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showPopup(MainActivity.this, vs);
}
});
return true;
}
menu_overflow.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:clickable="true"
>
<ImageButton
android:id="@+id/imageButton1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_launcher"
/>
menu.xml文件
<item
android:id="@+id/action_settings"
android:orderInCategory="100"
android:showAsAction="always"
android:icon="@drawable/ic_launcher"
/>
acton栏中的按钮没有响应。
当我在xml中声明动作视图时,按钮会响应,但不会显示图标。像这样举例如:
<item
android:id="@+id/action_settings"
android:orderInCategory="100"
android:showAsAction="always"
android:icon="@drawable/ic_launcher"
android:actionViewClass="android.widget.ImageButton"
/>
答案 0 :(得分:0)
尝试在menu_overflow.xml中只使用ImageButton,
<?xml version="1.0" encoding="utf-8"?>
<ImageButton xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/imageButton1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_launcher"
/>
然后将布局膨胀为ImageButton并将其传递给actionview。使用ImageView,向其添加一个onclick监听器。
ImageButton iv = (ImageButton) inflater.inflate(R.layout.menu_overflow, null);
iv.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
//TODO ADD CODE
}
});
答案 1 :(得分:0)
其他选项是让您的LinearLayout通过不使用ImageButton处理它来处理点击(并且您可以保留ViewGroup):
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:clickable="true"
>
<ImageButton
android:id="@+id/imageButton1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_launcher"
android:clickable="false"
/>
答案 2 :(得分:0)
@Override
public boolean onCreateOptionsMenu(final Menu menu) {
getMenuInflater().inflate(R.menu.menu, menu);
selectedMenuItem = menu.findItem(R.id.action_cart);
View actionView=selectedMenuItem.getActionView();
if(actionView!=null) {
countTvMenuItem=actionView.findViewById(R.id.count_tv);
countImageViewMenuItem=actionView.findViewById(R.id.cart_ic_image);
}
countImageViewMenuItem.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mIntent = new Intent(HomePage.this, CartPage.class);
startActivity(mIntent);
}
});.