我有一个使用 gridview 实现的菜单,其中每个单元格都由一个带有可绘制图标的 TextView 组成。结果是屏幕上充满了图标,每个图标下都有描述。大多数图标都是从这样的资源加载的:
Drawable img = getResources().getDrawable(R.drawable.people);
textView.setCompoundDrawablesWithIntrinsicBounds(null, img, null, null);
为了个性化菜单,一些图标从存储在数据库中的位图中加载,如下所示:
byte[] imageAsBytes = org.kobjects.base64.Base64.decode(base64BitmapString);
Bitmap bmp = BitmapFactory.decodeByteArray(imageAsBytes, 0, imageAsBytes.length);
Drawable img = new BitmapDrawable(parent.getResources(), bmp);
textView.setCompoundDrawablesWithIntrinsicBounds(null, img, null, null);
我遇到的问题是从数据库加载的资源并不总是显示与从资源加载的图标相同的大小。在某些设备上它们的大小相同,但在其他设备上它们更小。
使所有可绘制对象缩放为相同大小的正确方法是什么?
所有图像均为 100x100 png 文件。Android SDK 目标版本为 8 及以上。
我正在编辑它以包含网格和网格单元格的 xml:
网格单元:
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/label"
style="@style/ButtonGridCell"
android:layout_centerHorizontal="true"
android:drawablePadding="4dp"
android:gravity="center" >
</TextView>
带网格的页面:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
style="@style/PageLayout" >
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<ImageView
android:id="@+id/homelogo"
style="@style/HomeLogo" />
<GridView
android:id="@+id/button_grid"
style="@style/ButtonGrid"
android:layout_below="@id/homelogo" >
</GridView>
</RelativeLayout>
</RelativeLayout>
款式:
<style name="ButtonGridBase">
<item name="android:layout_width">fill_parent</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:layout_centerHorizontal">true</item>
<item name="android:horizontalSpacing">15dp</item>
<item name="android:verticalSpacing">18dp</item>
<item name="android:gravity">center</item>
<item name="android:stretchMode">columnWidth</item>
<item name="android:layout_margin">8dp</item>
<item name="android:fadeScrollbars">false</item>
</style>
<style name="ButtonGrid" parent="@ButtonGridBase">
<item name="android:columnWidth">100dp</item>
<item name="android:numColumns">auto_fit</item>
</style>