DialogFragment不会在活动窗口中浮动

问题描述 投票:0回答:2

我创建了一个类扩展DialogFragment类,我的代码如下,我的问题是对话框隐藏在状态栏(在系统中)和工具栏(在活动中),我在这里引用问题DialogFragment not floating, acts embeded or as another fragment添加onCreate函数并设置样式,但对话框仍然只隐藏在工具栏下,而不是教程说它将浮动在活动窗口上。

public class PasswordDialog extends DialogFragment {
......
public static PasswordDialog newInstance(PdfFragment pdfFragment) {
    Log.i(sClassTag,"newInstance in PdfFragmentPasswordDialog");
    PdfFragmentPasswordDialog passwordDialog = new PdfFragmentPasswordDialog();
    passwordDialog.mPdfFragment = pdfFragment;
    setInteractionListener(pdfFragment);
    return passwordDialog;
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // Pick a style based on the num.
    int style = DialogFragment.STYLE_NORMAL, theme = 0;
    setStyle(style, theme);
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    Log.i(sClassTag,"onCreateView in PdfFragmentPasswordDialog");
    // Inflate the layout to use as dialog or embedded fragment
    mView = inflater.inflate(R.layout.layout_password, container, false);
    addButtonListener();
    addEdittextListener();
    return mView;
}

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    Log.i(sClassTag,"onCreateView in onCreateDialog");
    Dialog dialog = super.onCreateDialog(savedInstanceState);
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
    return dialog;
}
void showPasswordDialog(boolean isFirstTime) {
....
 FragmentManager fragmentManager = getActivity().getFragmentManager();

 show(fragmentManager, "dialog");
 ...
}

布局文件是

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<ImageView
    android:layout_width="48dp"
    android:layout_height="48dp"
    android:src="@drawable/ic_img_passwordkey_48"
    android:id="@+id/key_icon"
    android:layout_gravity="center_horizontal"
    android:layout_marginTop="20dp"
    android:contentDescription="@string/password_input_hint_message"/>

<Space
    android:layout_width="match_parent"
    android:layout_height="16dp" />

<EditText
    android:imeOptions="flagNoExtractUi"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:inputType="textPassword"
    android:textColorHint="@color/password_dialogUI_hint_text_color"
    android:textColor="@color/password_dialogUI_text_color"
    android:textSize="12sp"
    android:hint="@string/password_input_hint_message"
    android:ems="10"
    android:id="@+id/dialogUI_edit_text"
    android:textCursorDrawable="@null"
    android:fontFamily="sans-serif"
    android:layout_marginStart="8dp"
    android:layout_marginEnd="8dp"
    android:textDirection="locale"/>

<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="@string/password_error_warning_message"
    android:textColor="@color/password_dialogUI_warning_color"
    android:id="@+id/dialogUI_warning_text"
    android:textSize="12sp"
    android:visibility="invisible"
    android:fontFamily="sans-serif"
    android:paddingStart="4dp"
    android:paddingEnd="4dp"
    android:layout_marginStart="8dp"/>

<Space
    android:layout_width="match_parent"
    android:layout_height="8dp" />

<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="8dp">

<Button
    android:text="@string/password_ok_button"
    android:textColor="@drawable/layout_disable_text_color"
    android:minWidth="64dp"
    android:layout_width="wrap_content"
    android:layout_height="36dp"
    android:id="@+id/password_dialogUI_ok_button"
    android:layout_alignParentEnd="true"
    style="?android:attr/borderlessButtonStyle"
    android:background="@drawable/layout_password_button_background"
    android:layout_marginEnd="8dp"/>

<Button
    android:text="@string/password_cancel_button"
    android:textColor="@drawable/layout_disable_text_color"
    android:minWidth="64dp"
    android:layout_width="wrap_content"
    android:layout_height="36dp"
    android:id="@+id/password_dialogUI_cancel_button"
    style="?android:attr/borderlessButtonStyle"
    android:layout_toStartOf="@+id/password_dialogUI_ok_button"
    android:background="@drawable/layout_password_button_background"
    android:layout_marginEnd="8dp"/>

android android-dialogfragment
2个回答
1
投票
  1. 在Activity中,尝试使用fragment.show(),而不是调用自己的show()。 PasswordDialog fragment = PasswordDialog(); fragment.show(getFragmentManager(), "TAG_HERE");

2.将android:minWidth和android:minHeight添加到你的xml中。

<LinearLayout android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:minWidth="1000dp"  
android:minHeight="1000dp">

见下文:Full Screen DialogFragment in Android


添加:

  1. 要调整DialogFragment的大小,可以在onResume中设置值。 public void onResume() { super.onResume(); Window window = getDialog().getWindow(); // You can define popup_width and popup_height int width = getResources().getDimensionPixelSize(R.dimen.popup_width); int height = getResources().getDimensionPixelSize(R.dimen.popup_height); window.setLayout(width, height); window.setGravity(Gravity.CENTER); // Optional }

见下文: How to set DialogFragment's width and height? https://stackoverflow.com/a/17916441/850347


0
投票

这是自定义DialogFragment的步骤:

1.从方法上的xml填充自定义视图

public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState)
{

    getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE);
    getDialog().setCanceledOnTouchOutside(true);

    View view = inflater.inflate(R.layout.XXX,
            container, false);
    //TODO:findViewById, etc
    return view;
}

2.将对话框的宽度设置为onResume()的高度,在onResume()/ onStart()中为remrember,似乎在其他方法中不起作用

public void onResume()
{
    super.onResume();
    Window window = getDialog().getWindow();
    window.setLayout(width, height);
    window.setGravity(Gravity.CENTER);
    //TODO:
}
© www.soinside.com 2019 - 2024. All rights reserved.