这是我在下面的dialogFragment类:
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);
}
}
}
从我的活动中调用此方法以显示我的对话框:
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>
注意:更改Alert.sialog类从android.support.v7.app.AlertDialog导入到android.app.AlertDialog,将自定义对话框的UI更改为双平方对话框。图片如下:
答案 0 :(得分:0)
一切都在那里,你无法看到它。像这样改变你的风格(添加一行,第一个样式标签内的第一行):
<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测试。