0

我发现 Android 基于屏幕密度为按钮选择的图像资源没有帮助。

我正在为孩子们开发一个应用程序,所以我希望它有漂亮的大按钮,但同时我必须将自己限制在可用的屏幕空间内。

本质上,我想使用适合我拥有的屏幕尺寸的图像尺寸,而不是它的密度。

例如,假设我想在横向模式下在屏幕一侧放置 5 个按钮。我想做这样的事情..

  1. 在 PIXELS 中获取屏幕的高度。
  2. 计算每个按钮 (hButton) 的高度,在它们之间留出一些空间。
  3. 加载适当的图像资源。即最小的一个,至少是 hButton 像素。
  4. 将图像缩放为 hButton 像素高。

类似的东西。

Android 有一个很好的方法来做到这一点,还是我必须自己编写代码?如何访问适当的图像?(我的大多数按钮使用两个图像 - 向上和向下)

谢谢

编辑:

我的问题似乎不够清楚。我不需要知道如何布置按钮,而且我对 Android 如何根据密度选择图像有很好的理解——这就是问题所在。

考虑这两个设备 -

1/ Galaxy I9000 手机 - 屏幕尺寸 4" HDPI

2/ 三星 Tab 3 平板电脑 - 屏幕尺寸 7" HDPI

因为两者具有相同的屏幕密度,所以两者都将以相同的物理尺寸显示图像。一个为 1" 正方形的图标将是另一个 1" 正方形。那就是问题所在。我希望按钮与屏幕大小成正比。

可以尝试使用特定于大小的资源(例如drawable-small),但是不同密度的小型设备之间会出现问题,这意味着创建更多的目录,这似乎是个坏主意。

我倾向于在 no-dpi 目录中放置各种尺寸,然后根据需要加载。

4

3 回答 3

0
  1. 你可以问你按钮它是多少位

    int hButton = imageButton.getHeight()

  2. 然后你可以用同样的方法得到按钮的高度,还有一些简单的学校数学:

    getHeight()/buttonCount+(buttonCount*padding)

  3. 加载您拥有的最大图像并将其缩小到您的需要,因为您不知道它有多大,除非您自己映射它。我的意思是你可以构建一个类似于 utils 类的东西,其中包含一个带有 imageNames 及其大小(以 px 为单位)的地图

于 2013-09-19T09:02:44.190 回答
0

Android 中的布局 XML 非常灵活和强大。您可以像下面那样动态布局按钮。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:orientation="vertical">

  <Button
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_margin="10dp"
    android:layout_weight="1"
    android:text="Button A"/>

  <Button
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_margin="10dp"
    android:layout_weight="1"
    android:text="Button A"/>

  <Button
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_margin="10dp"
    android:layout_weight="1"
    android:text="Button A"/>

  <Button
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_margin="10dp"
    android:layout_weight="1"
    android:text="Button A"/>

</LinearLayout>

至于图片资源,如果你觉得标准的Android图片资源选择没有帮助,那你肯定是误会了。这与按钮的大小无关。它与图像的密度有关。

如果您正在考虑使用简单的形状作为按钮,您可能想了解 ShapeDrawables。

于 2013-09-19T09:07:32.010 回答
-1

用于获取屏幕运行时高度和宽度

Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
int width = size.x;
int height = size.y;

按钮高度

int buttonHeight = hButton.getHeight():

然后获取最小按钮高度计算图像高度并将其设置为图像资源。如果您要求图像大小调整代码,请在此处查看。

Bitmap yourBitmap;
Bitmap resized = Bitmap.createScaledBitmap(yourBitmap, newWidth, newHeight, true);
于 2013-09-19T09:19:18.283 回答