如何设置 PopupWindow 的布局和尺寸

4
我正在从Android编写我的第一个程序,但是在定位和调整PopupWindow的大小时遇到了困难。目前,弹出窗口将在单击菜单栏上的按钮后激活。 单击后,我希望弹出窗口居中显示,但当前单击的结果如下图所示(由于<10声望无法发布图片):

https://www.box.com/s/7d4qk8tqlvhiog7576mc

Java弹出方法和监听器:
public void showPopup(View add){
    PopupWindow popup = new PopupWindow(this);
    setContentView(R.layout.add);
    popup.setBackgroundDrawable(null);
    popup.showAtLocation(add, Gravity.CENTER,0,0);
    popup.setFocusable(true);
    popup.setOutsideTouchable(true);
    View hideAdd = findViewById(R.id.add_task);
    hideAdd.setVisibility(View.INVISIBLE);

}
public boolean onOptionsItemSelected(MenuItem menuItem){
    switch(menuItem.getItemId()){
        case R.id.add_task:
            View addTaskView = findViewById(R.id.add_task);
            showPopup(addTaskView);
            return true;
        default:
            return false;
    }
}

}

添加布局XML:
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:gravity="center"
          android:orientation="horizontal">

    <TextView
        android:id="@+id/title_text"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/task_title"
        android:textSize="25sp"
        android:textColor="@android:color/holo_blue_bright"/>

    <View
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:background="@android:color/holo_blue_bright"/>

    <EditText android:id="@+id/task_name"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:hint="@string/task_prompt">

         </EditText>
 </LinearLayout>

任何帮助将不胜感激。

我不确定你为什么采取这种方法...但是尝试使用不同类型的对话框会更简单。 - amalBit
谢谢您的建议,但我认为对话框只能用作AlertDialog或Date/TimePickerDialog。我的意图是提供一个EditText字段,并将输入的数据传递到存储的任务列表中。这是否可以使用对话框实现? - Ell_18
3个回答

1

有一种叫做自定义对话框的东西... 例如:

  1. 你可以设计一个布局并将其设置为对话框。

    Dialog dialog=new Dialog();
    dialog.setContentView(这里填写你设计的布局);
    
  2. 将一个活动转换为对话框。查看我对post的回答。

所以,对话框有无限的可能性。

1
太棒了,谢谢!看起来是一个更简单和有用的解决方案 :) - Ell_18

1
尝试将xml中所有的"android:layout_width="match_parent""更改为"android:layout_width="wrap_content""。

感谢您的回复,但似乎并没有影响结果。 - Ell_18
在我的情况下,我有一个使用match_parent的Switch,一旦我将其和父LinearLayout更改为wrap_content,它就不会使其大小超出必要范围。 - AlanKley

0

我认为这是因为您将下面的视图可见性设置为不可见。尝试将其注释掉并重新运行。


谢谢你的建议,但是如果你指的是hideAdd.setVisibility(View.INVISIBLE),那个函数是用来使菜单栏中的添加按钮不可见,以防止用户不断地在弹出窗口之上创建新的弹出窗口。 - Ell_18

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接