Android - 是否可以更改自定义对话框的重力?

时间:2013-04-29 15:31:38

标签: android android-layout android-activity android-dialog android-dialogfragment

下面的图片基本上就是我想要实现的,这就是我的dialog_layout.xml直接来自eclipse

我想给自定义对话框充气,并将其放在屏幕右侧作为菜单。每次,我都会尝试显示此DialogFragment,下面的布局将自身置于屏幕中心。 (DialogFragment1的onCreateDialog()的代码位于图像下方。

有没有办法实现这个目标?我是否必须使用对话框主题创建活动?

Desired dialog

@Override
public Dialog onCreateDialog(Bundle savedInstanceState)
{
    // Create a new Dialog using the AlertDialog Builder
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());

    View background = getActivity().getLayoutInflater().inflate(R.layout.dialog_layout, null);

    builder.setView(background);        

    return builder.create();
}

任何帮助将不胜感激!

干杯

1 个答案:

答案 0 :(得分:2)

成功!

我使用DialogFragment在屏幕右上角生成一个自定义菜单对话框。

enter image description here

推理:

  • 需要大按钮,因此标准菜单太小。
  • 标准菜单是从自定义菜单按钮膨胀的麻烦。
  • 我想要一个相当纤薄的对话框,在右上角,与用户拇指按下菜单按钮时的位置相同。这与大多数菜单的逻辑相同。

面临的问题:

  • 对话框周围不需要的黑色边框|| 解决方案: dialog.setView(dialogLayout,0,0,0,0);
  • Dialog总是居中|| 解决方案:更改了WindowParams。
  • 尽管可以在最开始的时候看到XML设计,但是Dialog占据了大部分屏幕解决方案:应用自定义透明windowBackground主题

代码:

@Override
public Dialog onCreateDialog(Bundle savedInstanceState)
{
    // Create a new Dialog and apply a transparent window background style
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), R.style.dialog_theme);                 
    AlertDialog dialog = builder.create();

    // Create the custom dialog layout and set view with initial spacing parameters to prevent black background
    View dialogLayout = getActivity().getLayoutInflater().inflate(R.layout.dialog_fragment_menu, null);
    dialog.setView(dialogLayout, 0, 0, 0, 0);

    // Change the standard gravity of the dialog to Top | Right.
    WindowManager.LayoutParams wlmp = dialog.getWindow().getAttributes();       
    wlmp.gravity = Gravity.TOP | Gravity.RIGHT;

    return dialog;
}

我的风格代码很简单:

<style name="dialog_theme" parent="@android:style/Theme.Dialog">
    <item name="android:windowBackground">@android:color/transparent</item>
</style>