基于可用屏幕大小的Android PopupWindow放置

时间:2017-10-08 18:37:24

标签: android

我想在android中创建自定义popupWindow。我手头有2个问题 1.如何根据可用的屏幕尺寸放置弹出窗口(左,右,上,下)。例如 弹出窗口链接到的按钮 一个。如果它放在左上角,它应该在按钮的底部打开 b。如果它位于屏幕的左下角,则弹出窗口应该在按钮顶部的右侧打开

  1. 如何将弹出窗口附加到视图(例如按钮)

2 个答案:

答案 0 :(得分:0)

使用layout.setGravity(Gravity.<use any>)放置布局。假设弹出窗口使用该布局。

另见此链接: https://developer.android.com/reference/android/view/Gravity.html

答案 1 :(得分:0)

首先,您必须为弹出窗口定义布局。 示例:

<?xml version="1.0" encoding="utf-8"?>   
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">

    <Button
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:text="Button"
        android:id="@+id/button">
    </Button>

</LinearLayout>

接下来,您将创建一个处理弹出窗口的类

import android.content.Context;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.view.WindowManager;
import android.widget.ListView;
import android.widget.PopupWindow;

public class PopupMenu extends PopupWindow
{
    Context     m_context;

    public PopupMenu(Context context)
    {
        super(context);

        m_context = context;

        setContentView(LayoutInflater.from(context).
             inflate(R.layout.popup_menu, null));

        setHeight(WindowManager.LayoutParams.WRAP_CONTENT);
        setWidth(WindowManager.LayoutParams.WRAP_CONTENT);
    }

    public void show(View anchor)
    {
        // you can edit display location is here
        showAtLocation(anchor, Gravity.CENTER, 0, 0);
    }
}

您可以使用以下代码轻松使用它:

PopupMenu popupMenu = new PopupMenu(context);
popupMenu.show(view);

如果您在PopupWindow中放置了一个列表视图,则将宽度设置为WRAP_CONTENT将不起作用。为了正确设置PopupWindow宽度,你必须在show()方法中添加它:

 // force the popupwindow width to be the listview width
listview.measure(
                 View.MeasureSpec.UNSPECIFIED,
                 View.MeasureSpec.UNSPECIFIED)
setWidth(listview.getMeasuredWidth());

我希望它可以帮助你解决问题! 很高兴为您提供帮助!