先看一下效果图
主要介绍一下 五角星评分控件(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 取消 和 确定按钮设置监听