layout_common_dialog
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:background="@color/c_00000000"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/common_dialog_bg"
android:orientation="vertical">
<TextView
android:id="@+id/tv_dialog_title"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_44"
android:gravity="center"
android:textColor="@color/c_999999"
android:textSize="@dimen/sp_12"
tools:text="是否现场整改?" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_dialog"
android:layout_width="match_parent"
android:layout_height="wrap_content"
tools:itemCount="2"
tools:listitem="@layout/layout_common_dialog_item" />
</LinearLayout>
<TextView
android:id="@+id/btn_dialog_cancel"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_57"
android:layout_marginTop="@dimen/dp_8"
android:background="@drawable/common_dialog_bg"
android:gravity="center"
android:text="@string/cancel"
android:textColor="@color/c_008BFF"
android:textSize="@dimen/sp_18" />
</LinearLayout>
layout_common_dialog_item
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="@dimen/dp_57"
android:id="@+id/ll_common_dialog_item"
android:orientation="vertical">
<View
android:layout_width="match_parent"
android:layout_height="0.5dp"
android:background="@color/c_E5E5E5" />
<TextView
android:id="@+id/tv_common_dialog_item"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:textColor="@color/c_008BFF"
android:textSize="@dimen/sp_18"
tools:text="@tools:sample/full_names" />
</LinearLayout>
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.DisplayMetrics;
import android.view.Gravity;
import android.view.KeyEvent;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.blankj.utilcode.util.SizeUtils;
import com.pingan.android.jn.regulatory.R;
/**
* Created on 2019-12-06.
*
* @author xuqiang
*/
public class CommonListDialog extends Dialog {
private Context mContext;
private String mTitle;
private String[] mStrings;
private TextView mTvDialogTitle;
private RecyclerView mRvDialog;
private TextView mBtnDialogCancel;
public CommonListDialog(@NonNull Context context, String title, String[] strings) {
super(context);
this.mContext = context;
this.mTitle = title;
mStrings = strings;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
init();
}
public void init() {
setContentView(R.layout.layout_common_dialog);
mTvDialogTitle = findViewById(R.id.tv_dialog_title);
mRvDialog = findViewById(R.id.rv_dialog);
mBtnDialogCancel = findViewById(R.id.btn_dialog_cancel);
if (!TextUtils.isEmpty(mTitle)) {
mTvDialogTitle.setText(mTitle);
}
DialogAdapter dialogAdapter = new DialogAdapter(getContext(), mStrings);
mRvDialog.setAdapter(dialogAdapter);
mRvDialog.setLayoutManager(new LinearLayoutManager(getContext()));
dialogAdapter.setClickItemListener(new DialogAdapter.OnClickItemListener() {
@Override
public void onClickItem(int position, String message) {
dismiss();
if (mOnClickDialogListener != null) {
mOnClickDialogListener.onClickItem(position, message);
}
}
});
mBtnDialogCancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dismiss();
if (mOnClickDialogListener != null) {
mOnClickDialogListener.onCancel();
}
}
});
//设置窗口外是否可关闭
setCanceledOnTouchOutside(false);
//设置按back键不关闭
setOnKeyListener(new DialogInterface.OnKeyListener() {
@Override
public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
return keyCode == KeyEvent.KEYCODE_BACK;
}
});
Window dialogWindow = getWindow();
if (dialogWindow != null) {
//设置窗口位置
dialogWindow.setGravity(Gravity.BOTTOM | Gravity.CENTER);
//设置窗口进出动画
dialogWindow.setWindowAnimations(R.style.dialogWindowAnim);
//去掉背景
dialogWindow.setBackgroundDrawable(new BitmapDrawable(mContext.getResources(), (Bitmap) null));
// 获取屏幕宽、高
WindowManager.LayoutParams lp = dialogWindow.getAttributes();
DisplayMetrics d = mContext.getResources().getDisplayMetrics();
if (lp != null) {
// 设置为屏幕宽度
lp.width = (int) (d.widthPixels * 1.0) - SizeUtils.dp2px(10);
}
dialogWindow.setAttributes(lp);
}
}
public interface OnClickDialogListener {
void onClickItem(int position, String message);
void onCancel();
}
private OnClickDialogListener mOnClickDialogListener;
public void setClickItemListener(OnClickDialogListener onClickDialogListener) {
mOnClickDialogListener = onClickDialogListener;
}
}
import android.content.Context;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.pingan.android.jn.regulatory.R;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class DialogAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private final LayoutInflater mInflater;
private Context mContext;
private List<String> mArrayList;
public DialogAdapter(Context context, List<String> stringList) {
mContext = context;
mArrayList = stringList;
mInflater = LayoutInflater.from(context);
}
public DialogAdapter(Context context, String[] mArray) {
mContext = context;
mArrayList = new ArrayList<>(Arrays.asList(mArray));
mInflater = LayoutInflater.from(context);
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
return new DialogViewHolder(mInflater.inflate(R.layout.layout_common_dialog_item, parent, false));
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
if (mArrayList == null || TextUtils.isEmpty(mArrayList.get(position))) {
return;
}
DialogViewHolder viewHolder = (DialogViewHolder) holder;
viewHolder.mTextView.setText(mArrayList.get(position));
viewHolder.mLinearLayout.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
mClickItemListener.onClickItem(position, mArrayList.get(position));
}
});
}
@Override
public int getItemCount() {
if (mArrayList != null && mArrayList.size() > 0) {
return mArrayList.size();
}
return 0;
}
class DialogViewHolder extends RecyclerView.ViewHolder {
private TextView mTextView;
private LinearLayout mLinearLayout;
DialogViewHolder(@NonNull View itemView) {
super(itemView);
mTextView = itemView.findViewById(R.id.tv_common_dialog_item);
mLinearLayout = itemView.findViewById(R.id.ll_common_dialog_item);
}
}
public interface OnClickItemListener {
void onClickItem(int position, String message);
}
private OnClickItemListener mClickItemListener;
public void setClickItemListener(OnClickItemListener onClickItemListener) {
mClickItemListener = onClickItemListener;
}
}
style
<!--pop样式开始-->
<style name="PopWindowStyle" parent="@style/Theme.AppCompat.Dialog">
<item name="android:windowNoTitle">true</item>
<item name="android:background">@android:color/transparent</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowFrame">@null</item>
<item name="android:windowIsTranslucent">true</item>
<item name="android:backgroundDimEnabled">true</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowIsFloating">true</item>
</style>
<!-- dialog的动画-->
<style name="dialogWindowAnim" mce_bogus="1" parent="android:Animation">
<item name="android:windowEnterAnimation">@anim/animator_dialog_in</item>
<item name="android:windowExitAnimation">@anim/animator_dialog_out</item>
</style>
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="200"
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
android:duration="200"
android:fromYDelta="0"
android:toYDelta="100%" />
</set>
common_dialog_bg.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/c_FFFFFF" />
<!-- 圆角 -->
<corners android:radius="@dimen/dp_12" />
</shape>