RatingBar星星显示不全或星星图片被拉伸解决方案

最近公司用到一个RatingBar的星星控件,以前做应用的时候很少用到,这次也算是学习也是笔记吧
首先用到的控件是RatingBar,一般都很少用系统原生的,都是给出了自己用的UI星图,所以我们要做一些准备工作的

首先看看异常显示


如果给RatingBar设置固定的高度会导致星星显示不全,或者显示异常,这样子很丑,网上看过很多博客,试过了,各种办法都不太友好

就算在调试的这台手机上显示正常,更换个其他分辨率的手机就会出现显示不全,或者不够撑满控件的大小,所以给出了以下解决方案:
获取星星图片的原图大小,然后通过代码进行设置RatingBar的高度
先看看更改具体效果,首先放了两个系统的,一个是自适应高度,一个是指定高度,第三个是自定义背景的RatingBar,具体效果图如下:

具体步骤如下:

首先xml文件中放3个RatingBar

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <RatingBar
        android:id="@+id/rb1"
        android:numStars="5"
        android:rating="3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <RatingBar
        android:id="@+id/rb2"
        android:numStars="5"
        android:rating="3"
        android:layout_width="wrap_content"
        android:layout_height="30dp" />

    <RatingBar
        android:layout_marginTop="20dp"
        android:id="@+id/rb3"
        style="@style/FiveStarsStyle1"
        android:numStars="5"
        android:rating="3"
        android:layout_width="wrap_content"
        android:layout_height="30dp" />

</LinearLayout>


第三个是定义背景的RatingBar,在style文件中定义

 <!--五星控件 start-->
    <style name="FiveStarsStyle1" parent="@android:style/Widget.Holo.RatingBar.Small">
        <item name="android:progressDrawable">@drawable/five_rating_bar</item>
        <item name="android:minHeight">40dp</item>
        <item name="android:maxHeight">40dp</item>
    </style>
 <!--五星控件 end-->

星星进度的背景图片也是xml定义的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/stars_gray" />
    <item
        android:id="@android:id/secondaryProgress"
        android:drawable="@drawable/stars_gray" />
    <item
        android:id="@android:id/progress"
        android:drawable="@drawable/stars_bright" />
</layer-list>


两个小图标呢就是自己找的资源了
   

解决星星图片不能填充控件的关键代码:

package com.example.mytestdemo;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.LinearLayout;
import android.widget.RatingBar;

public class StarsActivity extends AppCompatActivity {
    RatingBar rb3;
    private int starsImgHeight;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_stars);
        rb3 = (RatingBar) findViewById(R.id.rb3);
        //获取图片的高度
        try {
            Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.stars_bright);
            starsImgHeight = bmp.getHeight();
        } catch (Exception e) {
            e.printStackTrace();
        }
        //将获取的图片高度设置给RatingBar
        LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams)rb3.getLayoutParams();
        lp.width = LinearLayout.LayoutParams.WRAP_CONTENT;
        lp.height =starsImgHeight;
        rb3.setLayoutParams(lp);
    }
}

主要还一开始说的思想,获取图片的高度设置给RatingBar,目前就这个解决方案了,如果大家有更好的方案,请给我留言哈,大家一起学习进步

demo下载


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章