Android 将自定义对话框绑定到项目(如上下文菜单)
Android bind custom dialog to item (like context menu)
我创建了自定义对话框并想将其绑定到我的文本视图。
当我单击我的文本视图时,我希望此对话框的行为类似于上下文菜单。
换句话说,我不希望这个对话框出现在屏幕中央,而是出现在我的textview附近。
当然,我可以计算出这个对话框需要的位置,但对我来说,这不是很好的方法。
我花了很多时间寻找一种方法,但不幸的是没有结果。
有什么好的解决办法吗?
在此先感谢您的帮助!
最后发现android里有PopupMenu,肯定能覆盖这个问题
Example 用法:
1. 在 xml:
中创建菜单
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/item_movies"
android:showAsAction="ifRoom|withText"
android:title="Movies"
android:visible="true"/>
<item
android:id="@+id/item_music"
android:showAsAction="ifRoom|withText"
android:title="Music"
android:visible="true"/>
<item
android:id="@+id/item_comedy"
android:showAsAction="ifRoom|withText"
android:title="Comedy"
android:visible="true"/>
</menu>
2。 Activity的基本实现:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.btn_click).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
PopupMenu popupMenu = new PopupMenu(PopMenuActivity.this, view);
popupMenu.setOnMenuItemClickListener(PopMenuActivity.this);
popupMenu.inflate(R.menu.popup_menu);
popupMenu.show();
}
});
}
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) {
case R.id.item_comedy:
Toast.makeText(this, "Comedy Clicked", Toast.LENGTH_SHORT).show();
return true;
case R.id.item_movies:
Toast.makeText(this, "Movies Clicked", Toast.LENGTH_SHORT).show();
return true;
case R.id.item_music:
Toast.makeText(this, "Music Clicked", Toast.LENGTH_SHORT).show();
return true;
}
}
3。结果是:
这就是我要找的。
我创建了自定义对话框并想将其绑定到我的文本视图。
当我单击我的文本视图时,我希望此对话框的行为类似于上下文菜单。
换句话说,我不希望这个对话框出现在屏幕中央,而是出现在我的textview附近。
当然,我可以计算出这个对话框需要的位置,但对我来说,这不是很好的方法。
我花了很多时间寻找一种方法,但不幸的是没有结果。
有什么好的解决办法吗?
在此先感谢您的帮助!
最后发现android里有PopupMenu,肯定能覆盖这个问题
Example 用法:
1. 在 xml:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/item_movies"
android:showAsAction="ifRoom|withText"
android:title="Movies"
android:visible="true"/>
<item
android:id="@+id/item_music"
android:showAsAction="ifRoom|withText"
android:title="Music"
android:visible="true"/>
<item
android:id="@+id/item_comedy"
android:showAsAction="ifRoom|withText"
android:title="Comedy"
android:visible="true"/>
</menu>
2。 Activity的基本实现:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.btn_click).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
PopupMenu popupMenu = new PopupMenu(PopMenuActivity.this, view);
popupMenu.setOnMenuItemClickListener(PopMenuActivity.this);
popupMenu.inflate(R.menu.popup_menu);
popupMenu.show();
}
});
}
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) {
case R.id.item_comedy:
Toast.makeText(this, "Comedy Clicked", Toast.LENGTH_SHORT).show();
return true;
case R.id.item_movies:
Toast.makeText(this, "Movies Clicked", Toast.LENGTH_SHORT).show();
return true;
case R.id.item_music:
Toast.makeText(this, "Music Clicked", Toast.LENGTH_SHORT).show();
return true;
}
}
3。结果是:
这就是我要找的。