片段对话框动画正确但布局完全黑色
Fragment Dialog Animating correctly but layout is completely black
下面是我的 dialogFragment class:
public static class MyDialog extends DialogFragment {
@SuppressLint("InflateParams")
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), R.style.styleDialog);
// Get the layout inflater
LayoutInflater inflater = getActivity().getLayoutInflater();
// Inflate and set the layout for the dialog
// Pass null as the parent view because its going in the dialog layout
builder.setView(inflater.inflate(R.layout.custom_dialog, null));
return builder.create();
}
@Override
public void onStart() {
super.onStart();
if (getDialog() == null) {
return;
}
DisplayMetrics metrics = getContext().getResources().getDisplayMetrics();
float dpValue = 170f;
float fPixels = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dpValue, metrics);
int dialogWidth = Math.round(fPixels);
int dialogHeight = ViewGroup.LayoutParams.WRAP_CONTENT;
if (getDialog().getWindow() != null) {
getDialog().getWindow().setLayout(dialogWidth, dialogHeight);
}
}
}
这个方法是从我的 activity 调用来显示我的对话框:
private void showDialog() {
DialogFragment dialogFragment = new MyDialog();
dialogFragment.show(getSupportFragmentManager(), MyDialog.class.getName());
}
这是我的 style.xml 和 anim.xml 分别是:
<style name="styleDialog" parent="@android:style/Theme.Dialog">
<item name="android:windowAnimationStyle">@style/CustomDialogAnimation</item>
</style>
<style name="CustomDialogAnimation">
<item name="android:windowEnterAnimation">@anim/animate_down_side_opens_up</item>
<item name="android:windowExitAnimation">@android:anim/slide_out_right</item>
</style>
<?xml version="1.0" encoding="utf-8"?>
<scale xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="2000"
android:fromXScale="1"
android:fromYScale="0"
android:pivotX="50%"
android:pivotY="0%"
android:toXScale="1.0"
android:toYScale="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"
android:orientation="vertical"
android:weightSum="3">
<TextView
android:id="@+id/numberOneText"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_gravity="center"
android:layout_marginTop="5dp"
android:layout_weight="1"
android:gravity="center"
android:text="@string/numberOne"
android:textSize="16sp" />
<TextView
android:id="@+id/numberTwoText"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_gravity="center"
android:layout_marginTop="10dp"
android:layout_weight="1"
android:gravity="center"
android:text="@string/numberTwo"
android:textSize="16sp" />
<TextView
android:id="@+id/numberThreeText"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_gravity="center"
android:layout_marginTop="10dp"
android:layout_weight="1"
android:gravity="center"
android:text="@string/numberThree"
android:textSize="16sp"
android:layout_marginBottom="5dp"/>
</LinearLayout>
注意: 将 AlertDialog class 导入从 android.support.v7.app.AlertDialog 更改为 android.app.AlertDialog 更改了 UI 的自定义对话框到双平方对话框。下面附上图片:
都在那里,只是你看不见。像这样更改您的样式(添加一行,第一个样式标签内的第一行):
<style name="styleDialog" parent="@android:style/Theme.Dialog">
<item name="android:background">@android:color/white</item>
<item name="android:windowAnimationStyle">@style/CustomDialogAnimation</item>
</style>
<style name="CustomDialogAnimation">
<item name="android:windowEnterAnimation">@anim/anim</item>
<item name="android:windowExitAnimation">@android:anim/slide_out_right</item>
</style>
并且您的布局及其内容变得可见。它可能看起来不像你想要的那样,但你可以从那里开始工作。自己看看:
测试 android.support.v7.app.AlertDialog.
下面是我的 dialogFragment class:
public static class MyDialog extends DialogFragment {
@SuppressLint("InflateParams")
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), R.style.styleDialog);
// Get the layout inflater
LayoutInflater inflater = getActivity().getLayoutInflater();
// Inflate and set the layout for the dialog
// Pass null as the parent view because its going in the dialog layout
builder.setView(inflater.inflate(R.layout.custom_dialog, null));
return builder.create();
}
@Override
public void onStart() {
super.onStart();
if (getDialog() == null) {
return;
}
DisplayMetrics metrics = getContext().getResources().getDisplayMetrics();
float dpValue = 170f;
float fPixels = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dpValue, metrics);
int dialogWidth = Math.round(fPixels);
int dialogHeight = ViewGroup.LayoutParams.WRAP_CONTENT;
if (getDialog().getWindow() != null) {
getDialog().getWindow().setLayout(dialogWidth, dialogHeight);
}
}
}
这个方法是从我的 activity 调用来显示我的对话框:
private void showDialog() {
DialogFragment dialogFragment = new MyDialog();
dialogFragment.show(getSupportFragmentManager(), MyDialog.class.getName());
}
这是我的 style.xml 和 anim.xml 分别是:
<style name="styleDialog" parent="@android:style/Theme.Dialog">
<item name="android:windowAnimationStyle">@style/CustomDialogAnimation</item>
</style>
<style name="CustomDialogAnimation">
<item name="android:windowEnterAnimation">@anim/animate_down_side_opens_up</item>
<item name="android:windowExitAnimation">@android:anim/slide_out_right</item>
</style>
<?xml version="1.0" encoding="utf-8"?>
<scale xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="2000"
android:fromXScale="1"
android:fromYScale="0"
android:pivotX="50%"
android:pivotY="0%"
android:toXScale="1.0"
android:toYScale="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"
android:orientation="vertical"
android:weightSum="3">
<TextView
android:id="@+id/numberOneText"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_gravity="center"
android:layout_marginTop="5dp"
android:layout_weight="1"
android:gravity="center"
android:text="@string/numberOne"
android:textSize="16sp" />
<TextView
android:id="@+id/numberTwoText"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_gravity="center"
android:layout_marginTop="10dp"
android:layout_weight="1"
android:gravity="center"
android:text="@string/numberTwo"
android:textSize="16sp" />
<TextView
android:id="@+id/numberThreeText"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_gravity="center"
android:layout_marginTop="10dp"
android:layout_weight="1"
android:gravity="center"
android:text="@string/numberThree"
android:textSize="16sp"
android:layout_marginBottom="5dp"/>
</LinearLayout>
注意: 将 AlertDialog class 导入从 android.support.v7.app.AlertDialog 更改为 android.app.AlertDialog 更改了 UI 的自定义对话框到双平方对话框。下面附上图片:
都在那里,只是你看不见。像这样更改您的样式(添加一行,第一个样式标签内的第一行):
<style name="styleDialog" parent="@android:style/Theme.Dialog">
<item name="android:background">@android:color/white</item>
<item name="android:windowAnimationStyle">@style/CustomDialogAnimation</item>
</style>
<style name="CustomDialogAnimation">
<item name="android:windowEnterAnimation">@anim/anim</item>
<item name="android:windowExitAnimation">@android:anim/slide_out_right</item>
</style>
并且您的布局及其内容变得可见。它可能看起来不像你想要的那样,但你可以从那里开始工作。自己看看:
测试 android.support.v7.app.AlertDialog.