尝试在不同尺寸的设备上使用多个水平图像时遇到问题。我有7个单独的Ratingbars,每个都使用不同的自定义图像。我缩放了所有图像并将它们放入各自的dpi可绘制文件夹中。我遇到的问题是在xlarge mdpi屏幕上(下图左上角),它们非常适合,但是当我在较小的屏幕上观看它们时,整个7个评级栏太宽了适合设备的范围,如下所示:
我已按照以下答案中所述,对图像进行了正确的缩放(基于mdpi的原始基本大小):https://stackoverflow.com/a/11581786/1634369
ldpi | mdpi | tvdpi | hdpi | xhdpi | xxhdpi | xxxhdpi
0.75 | 1 | 1.33 | 1.5 | 2 | 3 | 4
根据上面的缩放,以下是我的所有可绘制文件夹,显示各自dpi文件夹中每个图像的尺寸(均基于mdpi比率):
然后,为了显示每个评级栏,我为每个评级栏设置了一个选择器,它将使用默认的灰色图像和基于评级值的彩色图像。下面显示了我用于使用布局显示每个Ratingbars的代码。注意:我已根据基本mdpi值设置宽度和高度。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<RatingBar
android:numStars="1"
android:rating="1"
android:stepSize="0.01"
android:isIndicator="true"
android:layout_width="75dp"
android:layout_height="77dp"
android:layout_gravity="bottom"
android:gravity="bottom"
android:progressDrawable="@drawable/selector_a" />
<RatingBar
android:numStars="1"
android:rating="0.5"
android:stepSize="0.01"
android:isIndicator="true"
android:layout_width="73dp"
android:layout_height="114dp"
android:layout_gravity="bottom"
android:gravity="bottom"
android:progressDrawable="@drawable/selector_b" />
<RatingBar
android:numStars="1"
android:rating="0.5"
android:stepSize="0.01"
android:isIndicator="true"
android:layout_width="63dp"
android:layout_height="132dp"
android:layout_gravity="bottom"
android:gravity="bottom"
android:progressDrawable="@drawable/selector_c" />
<RatingBar
android:numStars="1"
android:rating="0.5"
android:stepSize="0.01"
android:isIndicator="true"
android:layout_width="79dp"
android:layout_height="145dp"
android:layout_gravity="bottom"
android:gravity="bottom"
android:progressDrawable="@drawable/selector_d" />
<RatingBar
android:numStars="1"
android:rating="0.5"
android:stepSize="0.01"
android:isIndicator="true"
android:layout_width="79dp"
android:layout_height="161dp"
android:layout_gravity="bottom"
android:gravity="bottom"
android:progressDrawable="@drawable/selector_e" />
<RatingBar
android:numStars="1"
android:rating="0.5"
android:stepSize="0.01"
android:isIndicator="true"
android:layout_width="108dp"
android:layout_height="168dp"
android:layout_gravity="bottom"
android:gravity="bottom"
android:progressDrawable="@drawable/selector_f" />
<RatingBar
android:numStars="1"
android:rating="0.5"
android:stepSize="0.01"
android:isIndicator="true"
android:layout_width="147dp"
android:layout_height="189dp"
android:layout_gravity="bottom"
android:gravity="bottom"
android:progressDrawable="@drawable/selector_g" />
</LinearLayout>
是否有人能够帮助我确保无论在哪个屏幕上显示等级栏,无论设备的密度如何,它总是看起来一样(它在10.1 mdpi屏幕上显示的方式显示在顶部左边的图像显示了所有不同的屏幕?非常感谢任何帮助。
非常感谢您花时间阅读这个问题。我已将代码放在Github的以下位置:https://github.com/gbayo1/RatingBarScalingIssue.git
答案 0 :(得分:0)
您可以使用Views
和LinearLayout
在屏幕上平均分发layout_weight
。要让layout_weight
工作,您必须将layout_width
设置为0dp
。这是正常的,不要让自己感到困惑。如果您想要垂直均匀分配,则必须将layout_height
设置为0dp
。 layout_weight
告诉LinearLayout
View
与其他Views
相比有多大。在您的情况下,我们希望所有Views
均匀分布,因此它们都需要具有相同的宽度。这就是我们为layout_weight
- 1
分配所有layout_weight
的原因。您可以使用layout_weight
执行更多操作,例如,如果您有两个视图,并且您希望左视图占据屏幕的三分之二,而右视图占据屏幕的三分之一,则您将分配左边一个layout_weight
为2,右边一个<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true">
<RatingBar
android:numStars="1"
android:rating="1"
android:stepSize="0.01"
android:isIndicator="true"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:progressDrawable="@drawable/selector_a"/>
<RatingBar
android:numStars="1"
android:rating="0.5"
android:stepSize="0.01"
android:isIndicator="true"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:progressDrawable="@drawable/selector_b"/>
<RatingBar
android:numStars="1"
android:rating="0.5"
android:stepSize="0.01"
android:isIndicator="true"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:progressDrawable="@drawable/selector_c"/>
<RatingBar
android:numStars="1"
android:rating="0.5"
android:stepSize="0.01"
android:isIndicator="true"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:progressDrawable="@drawable/selector_d"/>
<RatingBar
android:numStars="1"
android:rating="0.5"
android:stepSize="0.01"
android:isIndicator="true"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:progressDrawable="@drawable/selector_e"/>
<RatingBar
android:numStars="1"
android:rating="0.5"
android:stepSize="0.01"
android:isIndicator="true"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:progressDrawable="@drawable/selector_f"/>
<RatingBar
android:numStars="1"
android:rating="0.5"
android:stepSize="0.01"
android:isIndicator="true"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:progressDrawable="@drawable/selector_g"/>
</LinearLayout>
</RelativeLayout>
为1.
我相应地修改了你的布局:
Ratingbars
我认为除了RelativeLayout
之外,布局中最终会有其他内容,这就是为什么我已经将所有内容都包裹在progressDrawable
中。由于您的自定义layout_height
,自从我将wrap_content
更改为RatingBars
后,您可能会对评级栏的高度产生一些问题。如果它不起作用或者您希望它们具有不同的高度,则可以为layout_width
设置固定的高度,但保留layout_gravity
原样。
旁注:您原始布局中的所有gravity
和RatingBars
元素基本上都是无用的。要将android:gravity="bottom"
对齐到底部,您只需要LinearLayout
本身{{1}}。