项目中用到许多弹框。实现方法都差不多,这里挑一两个出来记录一下。
效果图如下:
》》系统Dialog实现的
》》自定义dialog
一般情况下,上面两种类型基本可以包括项目中的弹框效果了,最多是背景换一下,或者是图片,或者是自
己用shape画的图。
》》自定义dialog实现选择
需要说明的是最后一种在项目中使用了MVVM实现,实际是Databinding实现的,实现起来简单。
》》部分代码如下:
public class BorrowPurposeDialog extends Dialog {
public interface BorrowPurposeInterface{
void onPurposeConfirm(int produceIndex,int chooseItem);
}
//当前选择index
public ObservableInt chooseIndex = new ObservableInt(0);
private BorrowPurposeInterface purposeInterface;
//选择产品位置
private int productIndex = 0;
public BorrowPurposeDialog(@NonNull Context context, int productIndex, BorrowPurposeInterface purposeInterface) {
super(context, R.style.CustomDialog);
this.purposeInterface = purposeInterface;
this.productIndex = productIndex;
LayoutInflater layoutInflater = LayoutInflater.from(context);
DialogBorrowPurposeBinding purposeBinding = DataBindingUtil.inflate(layoutInflater,R.layout.dialog_borrow_purpose,null,false);
setContentView(purposeBinding.getRoot());
setCanceledOnTouchOutside(true);
Window dialogWindow = this.getWindow();
WindowManager.LayoutParams lp = dialogWindow.getAttributes();
dialogWindow.setGravity(Gravity.CENTER);
dialogWindow.setWindowAnimations(R.style.DialogAnimation);
lp.width = DeviceUtil.dp2px(context, 230);
lp.height = DeviceUtil.dp2px(context, 350);
dialogWindow.setAttributes(lp);
purposeBinding.setDataInfo(this);
}
public void setProductIndex(int productIndex){
this.productIndex = productIndex;
}
/**
* 更新选中
* @param index
*/
public void updateProductIndex(int index){
chooseIndex.set(index);
}
/**
* @param view
*/
public void onAction(View view){
switch (view.getId()){
case R.id.rly_back:
dismiss();
break;
case R.id.tv_go_borrow:
if(chooseIndex.get()!=0) {
dismiss();
purposeInterface.onPurposeConfirm(productIndex, chooseIndex.get());
}
break;
}
}
/**
* 功能选择
* @param view
*/
public void onPotionChoose(View view){
switch (view.getId()){
case R.id.lin_red:
if(chooseIndex.get()==1){
chooseIndex.set(0);
}else{
chooseIndex.set(1);
}
break;
case R.id.lin_yellow:
if(chooseIndex.get()==2){
chooseIndex.set(0);
}else {
chooseIndex.set(2);
}
break;
case R.id.lin_travel:
if(chooseIndex.get()==3){
chooseIndex.set(0);
}else {
chooseIndex.set(3);
}
break;
case R.id.lin_train:
if(chooseIndex.get()==4){
chooseIndex.set(0);
}else {
chooseIndex.set(4);
}
break;
case R.id.lin_home:
if(chooseIndex.get()==5){
chooseIndex.set(0);
}else {
chooseIndex.set(5);
}
break;
case R.id.lin_rent:
if(chooseIndex.get()==6){
chooseIndex.set(0);
}else {
chooseIndex.set(6);
}
break;
}
}
}
》》对应的布局文件:
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<variable
name="dataInfo"
type="com.ps.widget.BorrowPurposeDialog"/>
</data>
<RelativeLayout
android:layout_width="230dp"
android:layout_height="350dp"
android:background="@mipmap/yongtubg">
<!--标题-->
<RelativeLayout
android:id="@+id/rl_title"
android:layout_width="match_parent"
android:layout_height="55dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_centerHorizontal="true"
android:text="选择您的借款用途"
android:textSize="15sp"
android:textColor="#FFFFFF"
android:textStyle="bold" />
<RelativeLayout
android:id="@+id/rly_back"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="@{dataInfo::onAction}"
android:layout_alignParentRight="true">
<View
android:layout_width="15dp"
android:layout_height="15dp"
android:layout_margin="8dp"
android:background="@mipmap/ic_cancel" />
</RelativeLayout>
</RelativeLayout>
<!--购物-->
<LinearLayout
android:id="@+id/lin_red"
android:layout_below="@+id/rl_title"
android:layout_width="match_parent"
android:layout_height="38dp"
android:orientation="horizontal"
android:onClick="@{dataInfo.onPotionChoose}"
android:gravity="center_vertical">
<View
android:layout_width="15dp"
android:layout_height="16dp"
android:layout_marginLeft="20dp"
android:background="@mipmap/point_icon1" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="13sp"
android:textColor="@color/color_333333"
android:layout_marginLeft="8dp"
android:text="@string/purpose_shop" />
<View
android:layout_width="0dp"
android:layout_height="1dp"
android:layout_weight="1" />
<ImageView
android:layout_width="15dp"
android:layout_height="15dp"
android:layout_marginRight="20dp"
android:background="@{dataInfo.chooseIndex==1?@drawable/point_xuanze:@drawable/point_wei_xuanze}" />
</LinearLayout>
<!--分割线-->
<View
android:id="@+id/line_red"
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_below="@+id/lin_red"
android:background="@color/color_d8d8d8" />
<!--美容-->
<LinearLayout
android:id="@+id/lin_yellow"
android:layout_width="match_parent"
android:layout_height="38dp"
android:orientation="horizontal"
android:layout_below="@+id/line_red"
android:onClick="@{dataInfo.onPotionChoose}"
android:gravity="center_vertical">
<View
android:layout_width="15dp"
android:layout_height="16dp"
android:layout_marginLeft="20dp"
android:background="@mipmap/point_icon2" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="13sp"
android:textColor="@color/color_333333"
android:layout_marginLeft="8dp"
android:text="@string/purpose_meirong" />
<View
android:layout_width="0dp"
android:layout_height="1dp"
android:layout_weight="1" />
<ImageView
android:layout_width="15dp"
android:layout_height="15dp"
android:layout_marginRight="20dp"
android:background="@{dataInfo.chooseIndex==2?@drawable/point_xuanze:@drawable/point_wei_xuanze}" />
</LinearLayout>
<!--分割线-->
<View
android:id="@+id/line_yellow"
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_below="@+id/lin_yellow"
android:background="@color/color_d8d8d8" />
<!--旅游-->
<LinearLayout
android:id="@+id/lin_travel"
android:layout_width="match_parent"
android:layout_height="38dp"
android:orientation="horizontal"
android:layout_below="@+id/line_yellow"
android:onClick="@{dataInfo.onPotionChoose}"
android:gravity="center_vertical">
<View
android:layout_width="15dp"
android:layout_height="16dp"
android:layout_marginLeft="20dp"
android:background="@mipmap/point_icon3" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="13sp"
android:textColor="@color/color_333333"
android:layout_marginLeft="8dp"
android:text="@string/purpose_travel" />
<View
android:layout_width="0dp"
android:layout_height="1dp"
android:layout_weight="1" />
<ImageView
android:layout_width="15dp"
android:layout_height="15dp"
android:layout_marginRight="20dp"
android:background="@{dataInfo.chooseIndex==3?@drawable/point_xuanze:@drawable/point_wei_xuanze}" />
</LinearLayout>
<!--分割线-->
<View
android:id="@+id/line_travel"
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_below="@+id/lin_travel"
android:background="@color/color_d8d8d8" />
<!--培训-->
<LinearLayout
android:id="@+id/lin_train"
android:layout_width="match_parent"
android:layout_height="38dp"
android:orientation="horizontal"
android:layout_below="@+id/line_travel"
android:onClick="@{dataInfo.onPotionChoose}"
android:gravity="center_vertical">
<View
android:layout_width="15dp"
android:layout_height="16dp"
android:layout_marginLeft="20dp"
android:background="@mipmap/point_icon4" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="8dp"
android:text="@string/purpose_train"
android:textColor="@color/color_333333"
android:textSize="13sp" />
<View
android:layout_width="0dp"
android:layout_height="1dp"
android:layout_weight="1" />
<ImageView
android:layout_width="15dp"
android:layout_height="15dp"
android:layout_marginRight="20dp"
android:background="@{dataInfo.chooseIndex==4?@drawable/point_xuanze:@drawable/point_wei_xuanze}" />
</LinearLayout>
<!--分割线-->
<View
android:id="@+id/line_train"
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_below="@+id/lin_train"
android:background="@color/color_d8d8d8" />
<!--家装-->
<LinearLayout
android:id="@+id/lin_home"
android:layout_width="match_parent"
android:layout_height="38dp"
android:orientation="horizontal"
android:layout_below="@+id/line_train"
android:onClick="@{dataInfo.onPotionChoose}"
android:gravity="center_vertical"
>
<View
android:layout_width="15dp"
android:layout_height="16dp"
android:layout_marginLeft="20dp"
android:background="@mipmap/point_icon5"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="13sp"
android:textColor="@color/color_333333"
android:layout_marginLeft="8dp"
android:text="@string/purpose_home"
/>
<View
android:layout_width="0dp"
android:layout_height="1dp"
android:layout_weight="1"
/>
<ImageView
android:layout_width="15dp"
android:layout_height="15dp"
android:layout_marginRight="20dp"
android:background="@{dataInfo.chooseIndex==5?@drawable/point_xuanze:@drawable/point_wei_xuanze}"
/>
</LinearLayout>
<!--分割线-->
<View
android:id="@+id/line_home"
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_below="@+id/lin_home"
android:background="@color/color_d8d8d8" />
<!--租房-->
<LinearLayout
android:id="@+id/lin_rent"
android:layout_width="match_parent"
android:layout_height="38dp"
android:orientation="horizontal"
android:layout_below="@+id/line_home"
android:onClick="@{dataInfo.onPotionChoose}"
android:gravity="center_vertical"
>
<View
android:layout_width="15dp"
android:layout_height="16dp"
android:layout_marginLeft="20dp"
android:background="@mipmap/point_icon6"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="13sp"
android:textColor="@color/color_333333"
android:layout_marginLeft="8dp"
android:text="@string/purpose_rent"
/>
<View
android:layout_width="0dp"
android:layout_height="1dp"
android:layout_weight="1"
/>
<ImageView
android:layout_width="15dp"
android:layout_height="15dp"
android:layout_marginRight="20dp"
android:background="@{dataInfo.chooseIndex==6?@drawable/point_xuanze:@drawable/point_wei_xuanze}"
/>
</LinearLayout>
<!--分割线-->
<View
android:id="@+id/line_end"
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_below="@+id/lin_rent"
android:background="@color/color_d8d8d8" />
<TextView
android:id="@+id/tv_go_borrow"
android:layout_alignParentBottom="true"
android:layout_width="112dp"
android:layout_centerHorizontal="true"
android:layout_marginBottom="13dp"
android:layout_height="32dp"
android:textColor="@color/color_ffffff"
android:textSize="16sp"
android:text="去认证"
android:onClick="@{dataInfo::onAction}"
android:gravity="center"
android:background="@{dataInfo.chooseIndex==0?@drawable/shape_purpose_grey:@drawable/shape_purpose_confirm}" />
</RelativeLayout>
</layout>
后面遇到了类似的功能再整理。