Android 自定义评价Dialog(RatingBar的使用和EditText的剩余字数显示)

来源:互联网 发布:python爬虫怎么抓视频 编辑:程序博客网 时间:2024/05/16 23:34

先看一下效果图


主要介绍一下 五角星评分控件(RatingBar) 和 EditText下方剩余字数的显示

RatingBar的使用

<RatingBar
            android:id="@+id/ratingbar"
            style="@style/MyRatingBar"                //自定义属性  下文有详细解释
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginBottom="10dp"
            android:layout_marginLeft="15dp"
            android:layout_marginTop="15dp"
            android:isIndicator="false"                     //false 则可以通过触摸屏幕 改变RatingBar的进度  true则不可点击
            android:numStars="5" //总共有多少个★
            android:rating="0" //默认显示几个
            android:stepSize="0.5"> //以几个星星 为一个单位 可设置小数

</RatingBar>

在styles.xml 下设置一下RatingBar 是属性

    <style name="MyRatingBar" parent="@android:style/Widget.RatingBar">

//自定义 drawable  主要设置选中和未选中显示的小星星的颜色
        <item name="android:progressDrawable">@drawable/myratingbar</item>  

//设置星星的大小
        <item name="android:minHeight">20dip</item>
        <item name="android:maxHeight">20dip</item>
        <item name="android:isIndicator">true</item>
    </style>

自定义的drawable

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >

//背景星星
<item
android:id="@+android:id/background"
android:drawable="@drawable/star0"/>

//未选中时的星星
<item
android:id="@+android:id/secondaryProgress"
android:drawable="@drawable/star0">
</item>

//选择时的⭐
<item
android:id="@+android:id/progress"
android:drawable="@drawable/star_full"/>
</layer-list>

根据选中星星的个数  动态改变后面 Textview的评价

        rBar.setOnRatingBarChangeListener(new RatingBar.OnRatingBarChangeListener() {
            @Override
            public void onRatingChanged(RatingBar ratingBar, float v, boolean b) {
                if(rBar.getRating() <= 1){
                    tv_title.setText("很差");
                }else if(rBar.getRating() <= 2){
                    tv_title.setText("差");
                }else if(rBar.getRating() <= 3){
                    tv_title.setText("一般");
                }else if(rBar.getRating() <= 4){
                    tv_title.setText("好");
                }else if(rBar.getRating() <= 5){
                    tv_title.setText("很好");
                }
            }
        });

EditText部分

简单的一个布局

    <RelativeLayout
        android:id="@+id/rl_evaluation"
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:layout_marginLeft="20dp"
        android:layout_marginRight="20dp"
        android:layout_marginTop="3dp"
        android:background="@drawable/bg_evaluation_edittext"  //外面的矩形框
        android:orientation="vertical">
        <EditText
            android:id="@+id/et_evaluation"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginBottom="20dp"
            android:background="@null"
            android:hint="填写评价"
            android:maxLength="100"    //默认最多100个字符
            android:padding="5dp"
            android:text=""
            android:textSize="16sp" />
        <TextView
            android:id="@+id/tv_num"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_alignParentRight="true"
            android:layout_marginBottom="5dp"
            android:layout_marginRight="5dp"
            android:text="剩余字数:100" 
            android:textColor="@color/gray"
            android:textSize="13sp" />
    </RelativeLayout>

对EditText进行监听 

int maxNum = 100;

et_evaluation.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {

            }

            @Override
            public void afterTextChanged(Editable s) {
                int num = maxNum - s.length();
                if(num>=0){
                    tv_num.setText("剩余字数:"+ (num));
                }else {
                    tv_num.setText("剩余字数:"+ 0);
                }

            }
        });

简单介绍一下 dialog

final AlertDialog dialog = new AlertDialog.Builder(this).create();
        dialog.show();

        dialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE |WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);

//为了弹出软键盘
        dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);
        Window win = dialog.getWindow();
        win.setContentView(R.layout.dialog_evaluation);

       定义dialog上的几个控件

对小星星  EditText 取消 和 确定按钮设置监听






阅读全文
0 0