我想在android中创建自定义popupWindow。我手头有2个问题 1.如何根据可用的屏幕尺寸放置弹出窗口(左,右,上,下)。例如 弹出窗口链接到的按钮 一个。如果它放在左上角,它应该在按钮的底部打开 b。如果它位于屏幕的左下角,则弹出窗口应该在按钮顶部的右侧打开
答案 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());
我希望它可以帮助你解决问题! 很高兴为您提供帮助!