Android自定义底部弹出dialog
先看效果:
首先创建一个layout文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:id="@+id/work_detail">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="50dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:textSize="20dp"
android:layout_gravity="center"
android:text="开始时间"/>
<TextView
android:id="@+id/starttime_detail"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="100dp"
android:layout_gravity="center"
android:textSize="20dp"
/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="50dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:textSize="20dp"
android:layout_gravity="center"
android:text="结束时间"/>
<TextView
android:id="@+id/endtime_detail"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="100dp"
android:layout_gravity="center"
android:textSize="20dp"
/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="628dp"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="50dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginLeft="10dp"
android:text="任务内容"
android:textSize="20dp" />
</LinearLayout>
<TextView
android:id="@+id/containtext_detail"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:textSize="20dp" />
</LinearLayout>
</LinearLayout>
然后定义一个类用来显示自定义的dialog,继承Dialog:
package com.example.ado;
import android.annotation.SuppressLint;
import android.app.Dialog;
import android.content.Context;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.AdapterView;
import android.widget.EditText;
import android.widget.PopupWindow;
import android.widget.RelativeLayout;
import android.widget.TextView;
import androidx.annotation.NonNull;
public class WorkShowDialog extends Dialog {
private Context mContext;
private View view;
private String starttime_text;
private String endtime_text;
private String contain_text;
private TextView starttime;
private TextView endtime;
private TextView containtext;
public WorkShowDialog(@NonNull Context context,String starttime_text,String endtime_text,String contain_text) {
super(context,R.style.BottomDialog);
this.starttime_text=starttime_text;
this.endtime_text=endtime_text;
this.contain_text=contain_text;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.work_detail);
setCanceledOnTouchOutside(true);
Window window=getWindow();
window.setWindowAnimations(R.style.BottomDialog_Animation);
WindowManager.LayoutParams attributes=window.getAttributes();
attributes.gravity=Gravity.BOTTOM;
attributes.width=WindowManager.LayoutParams.MATCH_PARENT;
attributes.height=800;
window.setAttributes(attributes);
initview();
}
private void initview() {
starttime=(TextView)findViewById(R.id.starttime_detail);
endtime=(TextView)findViewById(R.id.endtime_detail);
containtext=(TextView)findViewById(R.id.containtext_detail);
starttime.setText(starttime_text);
endtime.setText(endtime_text);
containtext.setText(contain_text);
}
}
使用(这里传入的数据时我要显示的数据,可以自己定义):
WorkShowDialog dialog=new WorkShowDialog(getActivity(),works.get(position).getStarttime(),works.get(position).getEndtime(),works.get(position).getContaintext());
dialog.show();
最后还有一些样式(style),我也是从网上复制的,忘记是哪篇文章了,不好意思。
<!--用来设置从屏幕底部弄出来-->
<style name="BottomDialog" parent="@android:style/Theme.Holo.Dialog">
<!--是否有边框-->
<item name="android:windowFrame">@null</item>
<!--是否悬浮在Activity上-->
<item name="android:windowIsFloating">true</item>
<!--无标题-->
<item name="android:windowNoTitle">true</item>
<item name="android:windowFullscreen">true</item>
<item name="android:windowBackground">@color/cardview_light_background</item>
</style>
<!--从底部进入退出动画-->
<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和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="100%"
android:toYDelta="0" />
</set>
<?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>
都是创建在res/anim目录下