Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java setNumStars和setRating在自定义分级栏中不起作用_Java_Android - Fatal编程技术网

Java setNumStars和setRating在自定义分级栏中不起作用

Java setNumStars和setRating在自定义分级栏中不起作用,java,android,Java,Android,我在Java中设置自定义分级栏时遇到问题。问题是setNumStars和setRating不起作用。我只是在屏幕上得到一颗星,它被完全标记,尽管我已经将速率设置为0.0f 代码如下: DisplayMetrics metrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(metrics); chapter1 = new Chapter(this); android.widget.Relat

我在Java中设置自定义
分级栏时遇到问题。问题是
setNumStars
setRating
不起作用。我只是在屏幕上得到一颗星,它被完全标记,尽管我已经将速率设置为0.0f

代码如下:

DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);

chapter1 = new Chapter(this);
android.widget.RelativeLayout.LayoutParams layoutParam = new RelativeLayout.LayoutParams(metrics.widthPixels , metrics.heightPixels);
myLayout.addView(chapter1, layoutParam);

for (int i = 0; i < 4; i++) {
    for (int j = 0; j < 4; j++) {
        RatingBar ratingBar = new RatingBar(this);
        ratingBar.setProgressDrawable(ResourcesCompat.getDrawable(getResources(), R.drawable.custom_ratingbar_menu, null));
        ratingBar.setNumStars(3);
        ratingBar.setRating(0.0f);
        layoutParam = new RelativeLayout.LayoutParams(metrics.widthPixels / 6 , metrics.heightPixels / 32);
        layoutParam.setMargins(70 + chapter1.getLeft() + wSize * j, 50 + chapter1.getTop() + hSize * i + (metrics.heightPixels / 6), 0, 0);
        myLayout.addView(ratingBar, layoutParam);
    }
}
它是
自定义空菜单

<?xml version="1.0" encoding="utf-8"?>

<selector
xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:state_pressed="true"
        android:state_window_focused="true"
        android:drawable="@drawable/stars_off_menu" />

    <item android:state_focused="true"
        android:state_window_focused="true"
        android:drawable="@drawable/stars_off_menu" />

    <item android:state_selected="true"
        android:state_window_focused="true"
        android:drawable="@drawable/stars_off_menu" />

    <item android:drawable="@drawable/stars_off_menu" />

</selector>
编辑 在代码中设置可绘制的进度有一些问题。在XML中使用drawables时可以正常工作。问题似乎围绕着设置适当的属性。如果我有时间,我可以进一步研究,或者其他人有想法。(检查您的XML,有一个输入错误:“customm”而不是“custom”。我已经在下面更正了它。)

(对于API级别21及以上,您可以执行以下操作:

在MainActivity.java中:

RatingBar ratingBar = new RatingBar(this, null, 0, R.style.myRatingBar);
在styles.xml中:

<style name="myRatingBar" parent="@android:style/Widget.RatingBar">
    <item name="android:progressDrawable">@drawable/custom_ratingbar_menu</item>
</style>
可绘制文件与您定义的基本相同。我使用不同的图标,因为我没有访问您的图标:

自定义分级栏菜单.xml

<?xml version="1.0" encoding="utf-8"?>
<RatingBar xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/modelRatingBar"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:progressDrawable="@drawable/custom_ratingbar_menu" />
<?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/custom_empty_menu" />
    <item
        android:id="@android:id/secondaryProgress"
        android:drawable="@drawable/custom_empty_menu" />
    <item
        android:id="@android:id/progress"
        android:drawable="@drawable/custom_full_menu">
    </item>
</layer-list>
<?xml version="1.0" encoding="utf-8"?>
<selector
    xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true"
        android:state_window_focused="true"
        android:drawable="@android:drawable/star_off" />
    <item android:state_focused="true"
        android:state_window_focused="true"
        android:drawable="@android:drawable/star_off" />
    <item android:state_selected="true"
        android:state_window_focused="true"
        android:drawable="@android:drawable/star_off" />
    <item android:drawable="@android:drawable/star_off" />

</selector>
<?xml version="1.0" encoding="utf-8"?>
<selector
    xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true"
        android:state_window_focused="true"
        android:drawable="@android:drawable/star_on" />

    <item android:state_focused="true"
        android:state_window_focused="true"
        android:drawable="@android:drawable/star_on" />

    <item android:state_selected="true"
        android:state_window_focused="true"
        android:drawable="@android:drawable/star_on" />

    <item android:drawable="@android:drawable/star_on" />
</selector>

旧答案,但仍然有效。

从:

当版面宽度设置为
wrap\u content
(如果设置了另一个版面宽度,结果可能无法预测)时,将显示设置的星号数(通过setNumStars(int)或在XML版面中)

您正在执行以下操作。(宽度和高度不是
wrap\u content

相反,做下面的事情可能会让你得到你想要的,或者至少让你得到你想要的星星数

layoutParam = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT,RelativeLayout.LayoutParams.WRAP_CONTENT);
myLayout.addView(ratingBar, layoutParam);
我建议您暂时放弃可绘制进度,获得正确的星星数和评级,然后引入可绘制进度


如果这不起作用,您可以发布
自定义分级栏菜单

阅读此内容并发布您的
自定义分级栏菜单
文件进行分级吗issue@Rehan完成…!那么,如果您想为分级栏应用自定义布局呢?@Cheticamp何时我可以使用LayoutParams?我需要它进行设置margins@AryaSadeghi你可以像你一样设置边距以前做过。如果它们是静态的,您也可以在XML中为
RatingBar
设置它们。顺便说一句,我希望您用于
RatingBar
的图像不是XML可绘制图像,而是png或类似图像。我无法使XML可绘制图像正常工作。
<?xml version="1.0" encoding="utf-8"?>
<selector
    xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true"
        android:state_window_focused="true"
        android:drawable="@android:drawable/star_on" />

    <item android:state_focused="true"
        android:state_window_focused="true"
        android:drawable="@android:drawable/star_on" />

    <item android:state_selected="true"
        android:state_window_focused="true"
        android:drawable="@android:drawable/star_on" />

    <item android:drawable="@android:drawable/star_on" />
</selector>
@Override
protected void onCreate(Bundle savedInstanceState) {
    RelativeLayout myLayout = new RelativeLayout(this);

    super.onCreate(savedInstanceState);
    setContentView(myLayout);
    // Your loop would go here...
    RatingBar ratingBar = (RatingBar) getLayoutInflater()
        .inflate(R.layout.rating_bar, myLayout, false);
    myLayout.addView(ratingBar);
    ratingBar.setNumStars(5);
    ratingBar.setStepSize(0.5f);
    ratingBar.setRating(2.0f);
}
layoutParam = new RelativeLayout.LayoutParams(metrics.widthPixels / 6 , metrics.heightPixels / 32);
myLayout.addView(ratingBar, layoutParam);
layoutParam = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT,RelativeLayout.LayoutParams.WRAP_CONTENT);
myLayout.addView(ratingBar, layoutParam);