在运行时设置按钮图像

时间:2013-09-19 08:52:35

标签: android

我发现Android选择基于屏幕密度的按钮的图像资源是无益的。

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

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

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

  1. 以PIXELS获取屏幕高度。
  2. 计算每个按钮的高度(hButton),允许其间有一些空间。
  3. 加载适当的图像资源。即最小的一个至少是hButton像素。
  4. 将图像缩放为hButton像素高。
  5. 类似的东西。

    Android有一个很好的方法吗,或者我必须自己编码吗?如何访问适当的图像? (我的大多数按钮使用两个图像 - 向上和向下)

    由于

    编辑:

    在我的问题中,我似乎并不清楚。我不需要知道如何布置按钮,我很清楚Android如何根据密度选择图像 - 这就是问题所在。

    考虑这两个设备 -

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

    2 / Samsung Tab 3平板电脑 - 屏幕尺寸7“HDPI

    由于两者都具有相同的屏幕密度,因此两者都将以相同的物理尺寸显示图像。一个1“方形的图标在另一个上将是1”方形。那就是问题所在。我希望按钮与屏幕尺寸成比例

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

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

3 个答案:

答案 0 :(得分:0)

  1. 你可以问你按钮的位置

    int hButton = imageButton.getHeight()

  2. 然后你可以用同样的方式获得按钮的高度,这样一些简单的学校数学:

    getHeight()/buttonCount+(buttonCount*padding)

  3. 加载您拥有的最大图像并根据您的需要进行缩放,因为您不知道它有多大,除非您自己绘制它。我的意思是你可以构建像utils类这样的东西,它包含一个带有imageNames的地图,它们的大小是px

答案 1 :(得分: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。

答案 2 :(得分:-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);