dar*_*rsh 5 android popup android-actionbar
我正在尝试实现一个操作栏,其中一个按钮上的按钮显示一个弹出菜单.这是菜单.XML(操作栏中的菜单项)
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/search"
android:icon="@drawable/ic_action_search"
android:orderInCategory="0"
android:showAsAction="always"
android:title="@string/menu_search"/>
<item
android:id="@+id/refresh"
android:icon="@drawable/ic_action_refresh"
android:orderInCategory="1"
android:showAsAction="always"
android:title="@string/menu_refresh"/>
<Item
android:id="@+id/popup"
android:icon="@drawable/ic_action_search"
android:onClick="showPopup"
android:orderInCategory="1"
android:showAsAction="always"
android:title="@string/menu_search" />
Run Code Online (Sandbox Code Playgroud)
我希望在点击ID为"@ + id/popup"的项目时显示一个弹出菜单.
这是弹出菜单的XML
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/item1"
android:icon="@drawable/ic_action_search"
android:orderInCategory="0"
android:showAsAction="always"
android:title="@string/menu_search"/>
<item
android:id="@+id/item2"
android:icon="@drawable/ic_action_search"
android:orderInCategory="1"
android:showAsAction="always"
android:title="@string/menu_search"/>
Run Code Online (Sandbox Code Playgroud)
这是按钮的onClick方法
public void showPopup(View v) {
PopupMenu popup = new PopupMenu(this, v);
MenuInflater inflater = popup.getMenuInflater();
inflater.inflate(R.menu.overflow, popup.getMenu());
popup.show();
}
Run Code Online (Sandbox Code Playgroud)
问题是单击该按钮时不会显示弹出窗口.需要帮助的人.
Nli*_*ott 15
我在这里找到了这个:http://developer.android.com/guide/topics/ui/menus.html
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/selectImg"
android:icon="@android:drawable/ic_dialog_dialer"
android:showAsAction="always">
<menu>
<item android:id="@+id/top"
android:title="@string/topimg"/>
<item android:id="@+id/bottom"
android:title="@string/botimg" />
</menu>
</item>
</menu>
Run Code Online (Sandbox Code Playgroud)
您可以在菜单中放置菜单,以在单击项目时显示子菜单.然后,在Java中,您可以使用与往常相同的方法.
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu items for use in the action bar
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main, menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle presses on the action bar items
// View v = findViewById(R.id.f);
switch (item.getItemId()) {
case R.id.top:
//action
return true;
default:
return super.onOptionsItemSelected(item);
}
}
Run Code Online (Sandbox Code Playgroud)
即使它是子菜单,仍然可以识别xml中"top"的id.这对我有用,它看起来就像弹出菜单.
ser*_*ile 14
嗨,每一个,这是我自己的解决方案:我创建了showPopup方法,然后我在onOptionsItemSelected中调用它,如下所示:
public void showPopup(){
View menuItemView = findViewById(R.id.menu_save);
PopupMenu popup = new PopupMenu(getActivity(), menuItemView);
MenuInflater inflate = popup.getMenuInflater();
inflate.inflate(R.menu.popup, popup.getMenu());
popup.show();
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_save:
showPopup();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
Run Code Online (Sandbox Code Playgroud)
popup.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/decon"
android:showAsAction="ifRoom"
android:title="@string/decon"/>
<item
android:id="@+id/mRes"
android:showAsAction="ifRoom"
android:title="@string/mesRes"/>
</menu>
Run Code Online (Sandbox Code Playgroud)
main.xml =>它被称为onCreateOptionsMenu
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/menu_save"
android:enabled="true"
android:icon="@drawable/action_save"
android:showAsAction="ifRoom|withText"
android:title="@string/action_save"
android:visible="true"/>
</menu>
Run Code Online (Sandbox Code Playgroud)
最后我
implements PopupMenu.OnMenuItemClickListener to @Override onMenuItemClick method.
Run Code Online (Sandbox Code Playgroud)
我找到了解决这个问题的方法。我没有使用菜单 XML 来扩展弹出菜单,而是制作了一个 XML 布局文件。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/container"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#8b8989"
android:orientation="vertical"
android:padding="10dip" >
<TextView
android:id="@+id/menuItem1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dip"
android:text="@string/menu1" />
<TextView
android:id="@+id/menuItem2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dip"
android:text="@string/menu2" />
<TextView
android:id="@+id/menuItem3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dip"
android:text="@string/menu3" />
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
我改变了 onClick 方法
public void showPopup(View v) {
LayoutInflater inflater = (LayoutInflater) MainActivity.this
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
PopupWindow pw = new PopupWindow(inflater.inflate(
R.layout.overflow_layout, null, false), 300, 400, true);
pw.showAtLocation(findViewById(R.id.container), Gravity.CENTER, 0,
0);
}
Run Code Online (Sandbox Code Playgroud)
这解决了问题
| 归档时间: |
|
| 查看次数: |
37282 次 |
| 最近记录: |