Jos*_*ach 1 android android-layout ratingbar android-drawable android-styles
我设置了以下代码以RatingBar在Android上创建自定义样式:
在res/values/styles.xml:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="MyRatingBar" parent="@android:style/Widget.RatingBar">
<item name="android:minHeight">@dimen/rating_bar_height</item>
<item name="android:maxHeight">@dimen/rating_bar_height</item>
<item name="android:progressDrawable">@drawable/circle_ratingbar_full</item>
</style>
</resources>
Run Code Online (Sandbox Code Playgroud)
在res/drawable/circle_ratingbar_full.xml:
<?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/circle_ratingbar_full_empty" />
<item
android:id="@android:id/secondaryProgress"
android:drawable="@drawable/circle_ratingbar_full_empty" />
<item
android:id="@android:id/progress"
android:drawable="@drawable/circle_ratingbar_full_filled" />
</layer-list>
Run Code Online (Sandbox Code Playgroud)
在res/drawable/circle_ratingbar_full_empty.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="@drawable/button_disabled" />
<item android:state_focused="true"
android:state_window_focused="true"
android:drawable="@drawable/button_disabled" />
<item android:state_selected="true"
android:state_window_focused="true"
android:drawable="@drawable/button_enabled" />
<item android:drawable="@drawable/button_disabled" />
</selector>
Run Code Online (Sandbox Code Playgroud)
在res/drawable/circle_ratingbar_full_filled.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="@drawable/button_enabled" />
<item android:state_focused="true"
android:state_window_focused="true"
android:drawable="@drawable/button_enabled" />
<item android:state_selected="true"
android:state_window_focused="true"
android:drawable="@drawable/button_enabled" />
<item android:drawable="@drawable/button_enabled" />
</selector>
Run Code Online (Sandbox Code Playgroud)
此外,我有两个图像,res/drawable/button_enabled.png并且res/drawable/button_disabled.png,我想用来替代上的星星RatingBar.
Android Studio似乎没有个别drawable的问题.但是,当我RatingBar在xml布局中使用此样式时RatingBar,默认样式的工作没有任何问题,但有一些问题:
minHeight和maxHeight在样式中,RatingBar将拉伸到更大的高度,但仍然只有一个自定义星(圆).ListView项目视图中,则项目视图本身不再可单击(项目视图可以使用默认样式单击).在这个设置中有什么我想念的吗?我直接从RatingBarSDK中的默认样式复制drawables 并交换我的值(这导致上面的代码),但它仍然不起作用.
布局中使用的片段:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/accessory_view">
<LinearLayout
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
android:id="@+id/rating_min_text_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="Min Value"
android:paddingLeft="5dp"/>
<TextView
android:id="@+id/rating_max_text_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="Max Value"
android:paddingLeft="5dp"/>
</LinearLayout>
<RatingBar
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:id="@+id/rating"
style="@style/MyRatingBar"
android:stepSize="1.0"/>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
UPDATE
进一步的测试后,我发现,点击一个点,我看实际上将改变评级的值匹配的任何一部分在那里我点击它.所以看起来RatingBar就像一个0.5步的ProgressBar.因此,对于每个应该具有的每个星星而不是使用drawable,它似乎使用drawable 一次作为整个RatingBar区域的背景.
有没有人知道如何制作它以便我可以简单地替换星形drawable并保留所有其他RatingBar行为?
我打开了你的测试项目并进行了一些试错调试.我的结论是你不能使用XML形状drawables作为progressDrawables RatingBar.Android平台RatingBardrawables都是.png文件,这是一个非常好的指标,可能不支持XML drawable.我尝试在您的测试项目中使用位图drawables并且它们工作正常.
你只有解决方案似乎是使用位图drawables,除非你可以找出你自己的RatingBar实现.