Java setNumStars和setRating在自定义分级栏中不起作用
我在Java中设置自定义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
分级栏时遇到问题。问题是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);