版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_40543575/article/details/81289470
如图,我想要做一个类似于这样的全屏的一个UI界面,实现方式有很多
例如:dialogfragment,AlertDialog,透明的Activity等方式,不过,我的项目比较急,就选择了一个保守的方案!
Dialog shareDialog = new Dialog(context, R.style.dialog);
shareDialog.show();//显示弹框
//绘制弹出的UI
LayoutInflater inflater = LayoutInflater.from(context);
View viewDialog = inflater.inflate(R.layout.sign_day_showdialog, null);
//获取当前屏幕的宽高
int width = defaultDisplay.getWidth();
int height = defaultDisplay.getHeight();
//设置dialog的宽高为屏幕的宽高
ViewGroup.LayoutParams layoutParams = new ViewGroup.LayoutParams(width, height);
shareDialog.setContentView(viewDialog, layoutParams);
注意,UI布局一定要添加上透明属性
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/transparent">
<!--返回按钮-->
<ImageView
android:id="@+id/sign_share_exit"
android:layout_width="@dimen/_66px"
android:layout_height="@dimen/_66px"
android:layout_alignParentRight="true"
android:layout_marginBottom="@dimen/_20px"
android:layout_marginRight="@dimen/_40px"
android:layout_marginTop="@dimen/_100px"
android:src="@mipmap/qiandao_guanbi" />
<!--分享内容-->
<RelativeLayout
android:id="@+id/sign_share_background"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_above="@+id/placeholder"
android:layout_below="@+id/sign_share_exit"
android:layout_marginBottom="@dimen/base25dp"
android:layout_marginLeft="@dimen/_75px"
android:layout_marginRight="@dimen/_75px">
<TextView
android:id="@+id/share_text_today"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginLeft="@dimen/_30px"
android:layout_marginTop="@dimen/_32px"
android:text="2018/07/23"
android:textColor="@color/white"
android:textSize="@dimen/base15dp" />
<TextView
android:id="@+id/weekdays"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/share_text_today"
android:layout_marginLeft="@dimen/_30px"
android:layout_marginTop="@dimen/_20px"
android:text="周一"
android:textColor="@color/white"
android:textSize="@dimen/base15dp" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:background="@color/white"
android:orientation="horizontal">
<ImageView
android:id="@+id/student_icon"
android:layout_width="@dimen/_80px"
android:layout_height="@dimen/_80px"
android:layout_gravity="center"
android:layout_marginBottom="@dimen/_44px"
android:layout_marginLeft="@dimen/_30px"
android:layout_marginTop="@dimen/_36px"
android:src="@mipmap/center2_head" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/_20px"
android:layout_marginTop="@dimen/_44px"
android:layout_weight="1"
android:orientation="vertical">
<TextView
android:id="@+id/student_nickname"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="学员昵称"
android:textColor="@color/black"
android:textSize="@dimen/_22px" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="在优财网校坚持签到"
android:textColor="@color/text_999" />
<TextView
android:id="@+id/sign_days"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="1"
android:textColor="@color/text_BEB"
android:textSize="@dimen/_32px" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="天"
android:textColor="@color/text_999" />
</LinearLayout>
</LinearLayout>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginBottom="@dimen/_44px"
android:layout_marginRight="@dimen/_30px"
android:layout_marginTop="@dimen/_36px"
android:src="@mipmap/qiandao_erweima" />
</LinearLayout>
</RelativeLayout>
<LinearLayout
android:id="@+id/placeholder"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:background="#474747"
android:gravity="bottom"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="@dimen/_26px"
android:drawableLeft="@mipmap/line"
android:drawableRight="@mipmap/line0"
android:text="分享到"
android:textSize="@dimen/_28px" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginBottom="@dimen/_88px"
android:layout_marginTop="@dimen/_32px"
android:orientation="horizontal">
<ImageView
android:id="@+id/share_toweixin"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="left"
android:layout_marginLeft="@dimen/_202px"
android:src="@mipmap/qiandao_weixin" />
<View
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_weight="1" />
<ImageView
android:id="@+id/share_tofriend"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right"
android:layout_marginRight="@dimen/_202px"
android:src="@mipmap/qiandao_pengyouquan" />
</LinearLayout>
</LinearLayout>
</RelativeLayout>
摘取一段我项目中用用到的Dialog
private Dialog bottomDialog;
//创建dialog,同时设置dialog主题
bottomDialog = new Dialog(context, R.style.BottomDialog);
//绘制dialog UI视图
View contentView = LayoutInflater.from(context).inflate(R.layout.dialog_sharetofriend_and, null);
//给dialog添加view
bottomDialog.setContentView(contentView);
//为绘制的view设置参数
ViewGroup.LayoutParams layoutParams = contentView.getLayoutParams();
//设置为全屏的宽
layoutParams.width = getResources().getDisplayMetrics().widthPixels;
contentView.setLayoutParams(layoutParams);
//设置dialog位置
bottomDialog.getWindow().setGravity(Gravity.BOTTOM);
//添加进出场动画
bottomDialog.getWindow().setWindowAnimations(R.style.BottomDialog_Animation);
//允许点击外部退出dialog
bottomDialog.setCanceledOnTouchOutside(true);
//show dialog
bottomDialog.show();
这个BottomDialog的主题设置dialog的相关属性
<!--底部弹框属性设置-->
<style name="BottomDialog" parent="@style/Base.V7.Theme.AppCompat.Light.Dialog">
<!--无标题-->
<item name="android:windowNoTitle">true</item>
<!--键盘状态-->
<item name="android:windowSoftInputMode">stateUnspecified</item>
<!--dialog弹出时activity的背景-->
<item name="android:windowBackground">@android:color/transparent</item>
<!-- 浮于Activity之上 -->
<item name="android:windowIsFloating">true</item>
<!-- 边框 -->
<item name="android:windowFrame">@null</item>
</style>
这个dialog是从底部弹出的,为了交互效果,添加了动画
<!--底部弹框动画设置-->
<style name="BottomDialog.Animation" parent="Animation.AppCompat.Dialog">
<item name="android:windowEnterAnimation">@anim/dialog_in_anim</item>
<item name="android:windowExitAnimation">@anim/dialog_out_anim</item>
</style>
底部进出的动画
dialog_in_anim.xml 由下至上
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="300"
android:fromYDelta="100%"
android:toYDelta="0" />
</set>
dialog_out_anim.xml 由上至下
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="300"
android:fromYDelta="0"
android:toYDelta="100%" />
</set>
当然,还有从顶部弹出的dialog,这里我也放上动画
bottomDialog.getWindow().setWindowAnimations(R.style.TopDialog_Animation);
<!--顶部弹框动画设置-->
<style name="TopDialog.Animation" parent="Animation.AppCompat.Dialog">
<item name="android:windowEnterAnimation">@anim/dialog_toptobottom_in</item>
<item name="android:windowExitAnimation">@anim/dialog_toptobottom_out</item>
</style>
dialog_toptobottom_in.xml由上至下
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="300"
android:fromYDelta="-100%"
android:toYDelta="0" />
</set>
dialog_toptobottom_out.xml由下至上
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="300"
android:fromYDelta="0"
android:toYDelta="-100%" />
</set>
没办法,项目中要的弹框太多了各种样式的都有,我目前只能这样了!