不同大小的设备上的ImageButtons

时间:2013-10-15 12:58:03

标签: android

据我所知(并纠正我,如果我错了),如果你想要在多个大小的设备上看起来很好(具有良好的抗锯齿)的图形按钮,你必须创建不同的一组不同大小的图像,并将图像放在不同目录的集合中。我希望找到一个有用的示例,显示要使用哪些目录集以及这些目录需要的相对大小。

顺便说一句,当我说ImageButtons时,我的意思是包含一个图像而不是文本 - 所以9patch图像不会起作用。

编辑:我特别困惑的一件事是,我经常看到人们使用不同屏幕密度的示例(例如chuck258的答案)......但是如果你制作宽度和宽度的按钮;根据密度进行调整的高度,然后按下按钮的屏幕分数会以各种不受控制的方式变化,如果你有一个高密度但小尺寸的屏幕,那么你的按钮就会过大。

编辑:继上次编辑之后,也许我应该更具体地说明我想要的...让我们说我想要一个大约10%的正方形ImageButton(我接受(仅限肖像)屏幕宽度的8%到13%的变化...我将制作多大的图像以及它们将在哪些目录中?

编辑:我收到的消息是,如果你有更多的屏幕空间,那么标准的事情就是让图标占据屏幕的一小部分。据推测,这是因为允许图标变得非常大,使它们看起来像玩具一样,或幼稚。但问题是,我正在为儿童制作游戏应用程序!所以这正是我想要的。

7 个答案:

答案 0 :(得分:1)

我不知道我的问题是否正确,但对于图片的相对尺寸,请参阅:http://developer.android.com/design/style/devices-displays.html

您可以使用足够大的图像作为您想要支持的最大屏幕。然后在图片中使用scaleType="fitCenter"。一些缺点:

是的:ScaleType.FIT_CENTER是与fitCenter属性等效的程序设计。通常,您可以期望XML中的每个Property都有一个getter和setter。

答案 1 :(得分:1)

您应该始终为所有密度创建图像。大多数图片(如图标)应按 dp 固定高度。非固定高度的表面图像应为9张可伸缩的图像

更多关于9patch的信息:http://developer.android.com/guide/topics/graphics/2d-graphics.html#nine-patch

答案 2 :(得分:1)

Android平台的常规做法是仅针对不同的屏幕密度提供图像,而不是针对屏幕尺寸。如果我使用平板电脑,我不想看到大图像,我想看到更多的信息。所以最好不要增加视图的大小,而是为更大的屏幕提供不同的布局。

但是如果你有一些特定的理由提供10%的屏幕宽度图像,你可以使用不同qualifiers的'drawable'文件夹。您对'可用宽度','屏幕尺寸'和'屏幕像素密度'限定符感兴趣。 例如,提供此图像:

  • drawable-sw320dp-mdpi - image 32px width
  • drawable-sw320dp-hdpi - image 48px width
  • drawable-sw320dp-xhdpi - image 64px width
  • drawable-sw400dp-mdpi - image 40px width
  • ...为您想要支持的所有设备提供图像

答案 3 :(得分:0)

  

转到您的项目 - > Ctrl + n - > Android - > Android图标集 - >下一步 - >输入图标名称 - >下一步 - >图片 - - >浏览 - >从您的电脑中选择图片 - >无 - >完成。   多数民众赞成它会自动在4个名为

的文件夹中创建4种不同大小的单个图像      

1.drawable-HDPI   2.drawable-MDPI   3.drawable-xhdpi   4.drawable-xxhdpi

     

因此您可以在应用程序中使用此图像,它将根据设备屏幕尺寸拍摄该图像。

答案 4 :(得分:0)

你可以这样做:

package com.example.test;

import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Point;
import android.os.Bundle;
import android.view.Display;
import android.view.Menu;
import android.widget.ImageButton;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //Get ImageButton from XML
        ImageButton ib = (ImageButton) findViewById(R.id.imageButton);
        //Get the screen size
        Display display = getWindowManager().getDefaultDisplay();
        Point size = new Point();
        display.getSize(size);
        //10% of the screen width
        int width = (int) (size.x * 0.1);
        //Get and scale the Bitmap (10% of screen width)
        Bitmap bitmap = getImage(R.drawable.ic_launcher, width, width);
        ib.setImageBitmap(bitmap);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }


    public Bitmap getImage (int id, int width, int height) {
        Bitmap bmp = BitmapFactory.decodeResource( getResources(), id );
        Bitmap img = Bitmap.createScaledBitmap( bmp, width, height, true );
        bmp.recycle();
        return img;
    }
}

ImageButton:

<ImageButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/imageButton" />

答案 5 :(得分:0)

这不能完全回答你的问题。但如果您只是寻找通用图标,请查看t IconicDroid library它对我帮助很大。你可以在不看质量的情况下尽可能多地调整图标大小,同时也节省了大量空间,因此apk会更小。 google Play上有一个这个库的演示。

答案 6 :(得分:0)

假设您使用了不同屏幕尺寸的10%宽度的imageButotn 32(320x480)mdpi 48(480x800 | 854)hdpi 64(640x1024(galaxy tab 7“))大hdpi 72为(720x1280(nexus 7))large-tvdipi 72为(720x1280(xperia sp等)xhdpi 80 for(800x1280(motorola xoom 10“)xlarge-mdpi 108(1080x1920(xperia z等)xxhdpi 所以你要制作所有这些尺寸的图像,并将它们放在应有的文件夹中。