cod*_*441 4 android android-layout
我在每个项目的listview适配器中有一个弹出菜单.屏幕左边会弹出菜单,如何将其更改为右侧
private void showPopupMenu(View v, final App app) {
PopupMenu popupMenu = new PopupMenu(context, v);
popupMenu.getMenuInflater().inflate(R.menu.quick_action_menu,
popupMenu.getMenu());
popupMenu
.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) {
...
Run Code Online (Sandbox Code Playgroud)
您可以使用以下属性更改 PopupMenu 的位置: gravity、dropDownHorizontalOffset和dropDownVerticalOffset
首先将重力设置为 Gravity.END
popup.setGravity(Gravity.END);
Run Code Online (Sandbox Code Playgroud)
然后通过创建样式来更改下拉偏移量
<style name="MyPopupMenu" parent="@style/Widget.AppCompat.PopupMenu">
<item name="android:dropDownHorizontalOffset">-4dp</item>
<item name="android:dropDownVerticalOffset">4dp</item>
</style>
Run Code Online (Sandbox Code Playgroud)
如果你想重叠锚视图使用
parent="@style/Widget.AppCompat.PopupMenu.Overflow"
Run Code Online (Sandbox Code Playgroud)
最后将 MyPopupMenu 应用到您的主题
<item name="popupMenuStyle">@style/MyPopupMenu</item>
Run Code Online (Sandbox Code Playgroud)
迟到比一次更好=)这是我的决定,允许你将PopupMenu设置为指定的坐标.代码不是很好,但它的工作原理.
public void show(Activity activity, float x, float y)
{
final ViewGroup root = (ViewGroup) activity.getWindow().getDecorView().findViewById(android.R.id.content);
final View view = new View(context);
view.setLayoutParams(new ViewGroup.LayoutParams(1, 1));
view.setBackgroundColor(Color.TRANSPARENT);
root.addView(view);
view.setX(x);
view.setY(y);
PopupMenu popupMenu = new PopupMenu(context, view, Gravity.CENTER);
popupMenu.setOnDismissListener(new PopupMenu.OnDismissListener()
{
@Override
public void onDismiss(PopupMenu menu)
{
root.removeView(view);
}
});
popupMenu.show();
}
Run Code Online (Sandbox Code Playgroud)
你不能。正如文档所说:
PopupMenu 在锚定到视图的模式弹出窗口中显示菜单。如果有空间,弹出窗口将出现在锚视图下方;如果没有空间,则弹出窗口将出现在锚视图上方。如果 IME 可见,则弹出窗口不会与其重叠,直到触摸它为止。触摸弹出窗口外部会将其关闭。
您可能想尝试使用PopupWindow,它允许这样的定位。
归档时间: |
|
查看次数: |
15157 次 |
最近记录: |