【发布时间】:2014-05-14 20:06:45
【问题描述】:
我在尝试在不同尺寸的设备上使用多个水平图像时遇到问题。我有 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
【问题讨论】:
-
真的必须是完全相同的尺寸吗?较小的设备上的评级栏是否更小有关系吗?首先它应该更小,因为您在较小的设备上的空间更少。有没有理由让它在更大的设备上不应该更大?他们有屏幕空间,有理由浪费它吗?我想说的是:不要为您的
Views使用固定大小。请改用wrap_content或match_parent。您可以做很多事情来使您的布局与设备一起缩放。如果你告诉我它应该是什么样子,我可以帮助你。 -
非常感谢您的评论。不,它不必看起来相同,只要它在不同的屏幕上清晰可读即可。它们不必具有相同的大小或占用相同的空间,只要它们看起来合理,这就是我所寻找的。当我尝试包装内容时,评分栏没有正确显示图像,这就是我使用固定尺寸的原因
-
您希望它是什么样的?例如,我可以向您展示如何在屏幕上平均分配所有
RatingBars。 -
嗯,它应该显示一个进步。所以这是一个有100个关卡的游戏。第一个 RatingBar(在上述情况下为 A)可能代表前 5 个级别。因此,如果您完成第 1 级,您将获得 A 的 20%、第 2 级、A 的 40%,等等...然后第 2 个 RatingBar 可能代表接下来的 10 个级别,第 3 个 Ratingbar,接下来的 22 个级别,等等...所以每个 RatingBar 与其所代表的内容不成正比。一旦他们靠得很近,看起来还不错,用户基本上可以在整个游戏过程中看到并了解他们的进度
标签: android image scaling screen-size ratingbar