DialogFragment 不浮动 activity window
DialogFragment does not float on the activity window
我创建了一个class extends DialogFragment class,我的代码如下,我的问题是对话框隐藏在状态栏(在系统中)和工具栏(在activity), 我参考这里的问题 DialogFragment not floating, acts embeded or as another fragment 添加 onCreate
功能并设置样式,但是对话框仍然只隐藏在工具栏下面,而不是像教程说的那样会浮动在 activity window.
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"/>
在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
已添加:
要调整 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?
自定义 DialogFragment 的步骤如下:
1.inflate 来自 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.set 你的对话框的宽度和高度在 onResume() 中,记得在 onResume()/onStart() 中,似乎在其他方法中不起作用
public void onResume()
{
super.onResume();
Window window = getDialog().getWindow();
window.setLayout(width, height);
window.setGravity(Gravity.CENTER);
//TODO:
}
我创建了一个class extends DialogFragment class,我的代码如下,我的问题是对话框隐藏在状态栏(在系统中)和工具栏(在activity), 我参考这里的问题 DialogFragment not floating, acts embeded or as another fragment 添加 onCreate
功能并设置样式,但是对话框仍然只隐藏在工具栏下面,而不是像教程说的那样会浮动在 activity window.
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"/>
在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
已添加:
要调整 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?
自定义 DialogFragment 的步骤如下:
1.inflate 来自 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.set 你的对话框的宽度和高度在 onResume() 中,记得在 onResume()/onStart() 中,似乎在其他方法中不起作用
public void onResume()
{
super.onResume();
Window window = getDialog().getWindow();
window.setLayout(width, height);
window.setGravity(Gravity.CENTER);
//TODO:
}