带checkBox和ratingbar的圆角dialog
  oHo4xnCa6cuT 2023年11月28日 24 0


最终效果:

带checkBox和ratingbar的圆角dialog_ide


特点描述:

1.弹窗圆角

2.列表多选

3.ratingbar可拖动

一。带圆角的alertDialog
alertDialog的使用有三种:一种是自定义Dialog 继承 AlertDialog;一种是在使用的地方直接创建AlertDialog;一种是用工厂方法,创建自己的Dialog类,然后在构造方法内创建AlertDialog
第一种:继承的方式

public class BottomDialog extends Dialog implements View.OnClickListener{
 			}
  • 重写onCreate方法
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.view_bottom_dialog);

在oncreate方法中setContentView入自己的自定义布局

使用的时候创建即可

二。自定义Dialog不继承
使用工厂模式

public class AlertDialog{
...

public AlertDialog(Context context ,View view){
	this.context = context;
	WindowManager windowManager = (WindowManager) context
			.getSystemService(Context.WINDOW_SERVICE);
	display = windowManager.getDefaultDisplay();
	this.mView = view;
}

 public AlertDialog builder() {
	View view = LayoutInflater.from(context).inflate(
			R.layout.view_alertdialog, null);

	// 获取自定义Dialog布局中的控件
	...
	// 定义Dialog布局和参数
	dialog = new Dialog(context, R.style.MyDialog);
	dialog.setContentView(view);

	if (mView != null ){
		setLoaction();
	} else {
		if (MyApplication.isPad){
			lLayout_bg.setLayoutParams(new FrameLayout.LayoutParams((int) (display
					.getWidth() * 0.3), LayoutParams.WRAP_CONTENT));
		}else {
			lLayout_bg.setLayoutParams(new FrameLayout.LayoutParams((int) (Math.min(display
					.getWidth(),display.getHeight()) * 0.85), LayoutParams.WRAP_CONTENT));
		}
	}
	return this;
}

三。直接使用(本需求的弹窗就用这种模式吧)

private int selectNum = 0;
private void showChoosePlayModeDialog(MusicListData musicListData,View view) {
    AlertDialog.Builder dialogBuider = new AlertDialog.Builder(getContext(),R.style.myAlertDialog);
    View inflate = LayoutInflater.from(getContext()).inflate(R.layout.dialog_choose_play_mode, null);
    dialogBuider.setView(inflate);
    CheckBox gp = inflate.findViewById(R.id.type_gp);
    CheckBox gq = inflate.findViewById(R.id.type_gq);
    CheckBox jz= inflate.findViewById(R.id.type_jz);
    CheckBox zy = inflate.findViewById(R.id.type_zy);
    final RatingBar ratingBar1 = inflate.findViewById(R.id.ratingBar_1);
    final RatingBar ratingBar2 = inflate.findViewById(R.id.ratingBar_2);
    final RatingBar ratingBar3 = inflate.findViewById(R.id.ratingBar_3);
    final RatingBar ratingBar4 = inflate.findViewById(R.id.ratingBar_4);
    final ImageView img1 = inflate.findViewById(R.id.selectImg_1);
    final ImageView img2 = inflate.findViewById(R.id.selectImg_2);
    final ImageView img3 = inflate.findViewById(R.id.selectImg_3);
    final ImageView img4 = inflate.findViewById(R.id.selectImg_4);
    final TextView button = inflate.findViewById(R.id.btn);
    ratingBar1.setVisibility(View.GONE);
    ratingBar2.setVisibility(View.GONE);
    ratingBar3.setVisibility(View.GONE);
    ratingBar4.setVisibility(View.GONE);
    img1.setVisibility(View.GONE);
    img2.setVisibility(View.GONE);
    img3.setVisibility(View.GONE);
    img4.setVisibility(View.GONE);
    button.setClickable(false);
    selectNum = 0;
    gp.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if (isChecked){
                selectNum++;
                button.setClickable(true);
                button.setTextColor(getContext().getResources().getColor(R.color.white));
                button.setBackgroundColor(getContext().getResources().getColor(R.color.purple));
                ratingBar1.setVisibility(View.VISIBLE);
                img1.setVisibility(View.VISIBLE);
            }else {
                selectNum--;
                if (selectNum==0){
                    button.setClickable(false);
                    button.setTextColor(getContext().getResources().getColor(R.color.gray_text));
                    button.setBackgroundColor(getContext().getResources().getColor(R.color.gray));
                }
                ratingBar1.setVisibility(View.GONE);
                img1.setVisibility(View.GONE);

            }
        }
    });
    gq.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if (isChecked){
                selectNum++;
                button.setClickable(true);
                button.setTextColor(getContext().getResources().getColor(R.color.white));
                button.setBackgroundColor(getContext().getResources().getColor(R.color.purple));
                ratingBar4.setVisibility(View.VISIBLE);
                img4.setVisibility(View.VISIBLE);
            }else {
                selectNum--;
                if (selectNum==0){
                    button.setClickable(false);
                    button.setTextColor(getContext().getResources().getColor(R.color.gray_text));
                    button.setBackgroundColor(getContext().getResources().getColor(R.color.gray));
                }
                ratingBar4.setVisibility(View.GONE);
                img4.setVisibility(View.GONE);

            }
        }
    });
    jz.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if (isChecked){
                selectNum++;
                button.setClickable(true);
                button.setTextColor(getContext().getResources().getColor(R.color.white));
                button.setBackgroundColor(getContext().getResources().getColor(R.color.purple));
                ratingBar2.setVisibility(View.VISIBLE);
                img2.setVisibility(View.VISIBLE);
            }else {
                selectNum--;
                if (selectNum==0){
                    button.setClickable(false);
                    button.setTextColor(getContext().getResources().getColor(R.color.gray_text));
                    button.setBackgroundColor(getContext().getResources().getColor(R.color.gray));
                }
                ratingBar2.setVisibility(View.GONE);
                img2.setVisibility(View.GONE);

            }
        }
    });
    zy.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if (isChecked){
                selectNum++;
                button.setClickable(true);
                button.setTextColor(getContext().getResources().getColor(R.color.white));
                button.setBackgroundColor(getContext().getResources().getColor(R.color.purple));
                ratingBar3.setVisibility(View.VISIBLE);
                img3.setVisibility(View.VISIBLE);
            }else {
                selectNum--;
                if (selectNum==0){
                    button.setClickable(false);
                    button.setTextColor(getContext().getResources().getColor(R.color.gray_text));
                    button.setBackgroundColor(getContext().getResources().getColor(R.color.gray));
                }
                ratingBar3.setVisibility(View.GONE);
                img3.setVisibility(View.GONE);

            }
        }
    });
    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            toLayoutWorkDetail();
        }
    });


    AlertDialog dialog = dialogBuider.show();
    Window dialogWindow = dialog.getWindow();
    dialogWindow.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
    WindowManager.LayoutParams lp = dialogWindow.getAttributes();
    lp.width = 320;
    lp.gravity = Gravity.CENTER;
    dialogWindow.setAttributes(lp);

}

这里需要注意几个点:
1.设置弹窗大小:
必须是在show之后设置,否则无效

Window dialogWindow = dialog.getWindow();
    dialogWindow.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
    WindowManager.LayoutParams lp = dialogWindow.getAttributes();
    lp.width = 320;
    lp.gravity = Gravity.CENTER;
    dialogWindow.setAttributes(lp);

其中

dialogWindow.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));

是设置弹窗透明的,不然无法实现圆角效果

布局xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="300dp"
android:layout_height="wrap_content"
android:gravity="center"
>
<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:gravity="center"
    android:background="@drawable/bg_corner">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:gravity="center">
        <ImageView
            android:id="@+id/selectImg_1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@mipmap/select"/>
        <CheckBox
            android:id="@+id/type_gp"
            android:text="跟谱模式"
            style="@style/style_choose_play_mode_dialog_item" />
        <RatingBar
            android:id="@+id/ratingBar_1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            style="@style/xy_rating_bar_small"
            android:rating="2"
            android:isIndicator="false"
            />
    </LinearLayout>

    <View
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:background="@color/gray"/>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:gravity="center">
        <ImageView
            android:id="@+id/selectImg_2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@mipmap/select"/>
        <CheckBox
            android:id="@+id/type_jz"
            style="@style/style_choose_play_mode_dialog_item"
            android:text="节奏模式"/>
        <RatingBar
            android:id="@+id/ratingBar_2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            style="@style/xy_rating_bar_small"
            android:rating="2"
            android:isIndicator="false"
            />
    </LinearLayout>

    <View
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:background="@color/gray"/>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:gravity="center">
        <ImageView
            android:id="@+id/selectImg_3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@mipmap/select"/>
        <CheckBox
            android:id="@+id/type_zy"
            style="@style/style_choose_play_mode_dialog_item"
            android:text="自由模式"/>
        <RatingBar
            android:id="@+id/ratingBar_3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            style="@style/xy_rating_bar_small"
            android:rating="2"
            android:isIndicator="false"
            />
    </LinearLayout>

    <View
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:background="@color/gray"/>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:gravity="center">
        <ImageView
            android:id="@+id/selectImg_4"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@mipmap/select"/>
        <CheckBox
            android:id="@+id/type_gq"
            style="@style/style_choose_play_mode_dialog_item"
            android:text="跟曲模式"/>
        <RatingBar
            android:id="@+id/ratingBar_4"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            style="@style/xy_rating_bar_small"
            android:rating="2"
            android:isIndicator="false"
            />
    </LinearLayout>


    <View
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:background="@color/gray"/>
    <TextView
        android:paddingTop="10dp"
        android:paddingBottom="10dp"
        android:id="@+id/btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="确认"
        android:paddingLeft="40dp"
        android:paddingRight="40dp"
        android:layout_margin="20dp"
        android:textColor="@color/gray_text"
        android:background="@color/gray"/>
</LinearLayout>

其中几个注意点:
checkbox左边默认显示勾选框,想去掉的话

<item name="android:button">@null</item>

或者设置成自己定义的Drawbale文件

然后主要说下ratingbar的使用点

  1. 可拖动设置
android:isIndicator="false"

设为true不可拖动

  1. 修改图片
<style name="xy_rating_bar_small" parent="Base.Widget.AppCompat.RatingBar.Small">
<item name="android:minHeight">15dp</item>
<item name="android:maxHeight">15dp</item>
<item name="android:progressDrawable">@drawable/my_ratingbar_layerlist</item>

设置自己的style
然后在item里设置progressDrawable

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@android:id/background" android:drawable="@mipmap/star_gray_bg"/>
<item android:id="@android:id/secondaryProgress" android:drawable="@mipmap/star_gray_bg"/>
<item android:id="@android:id/progress" android:drawable="@mipmap/star_yellow"/>
</layer-list>

最后贴下圆角背景

<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners android:radius="50dp" />
<gradient
    android:angle="45"
    android:endColor="@color/white"
    android:startColor="@color/white" />
</shape>


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月28日 0

暂无评论

推荐阅读
oHo4xnCa6cuT