Tha*_*hem 5 graphics icons android
在"普通"大小的屏幕hdpi设备上,我知道应该使用72 x 72像素的图形,否则它们应该遵循图标设计指南(其中一些平台图形有趣地不做).当我尝试通过创建自己的新图形或通过从Android SDK复制图形文件来执行此操作时,菜单中的图形太大,并且它强制文本标签,即标题,应该在下面它没有出现.如果我"强制"使用48 x 48像素的图形,那么尺寸看起来很好并且文本标签有空间出现,但这似乎不是正确的解决方案,因为图形显示质量会降低,并且文档清楚地说应该使用72 x 72图形.
我知道9-patch图形应该用于帮助确保适当的缩放,但平台可绘制文件夹中的菜单图标图形似乎实际上都不是9补丁,因为它们没有任何9补丁标记.对于这些屏幕截图,我确实将9-patch标记添加到Android SDK平台10 72 x 72 hdpi ic_menu_share.png图形的副本中.(draw9patch.bat工具意外地改变了图形的颜色.)
在以下四个屏幕截图中,我将显示九个菜单图标显示,在我的G2上运行,并在具有类似G2特性的仿真器上运行:Android 2.2 API 8 WVGA800 240dpi.(这两种设备都具有"正常"大小的hdpi屏幕.)由于菜单图标图形一次只显示六个,因此每个设备有两个屏幕截图:v1和v2.屏幕截图是用于生成此应用程序的代码组件,以及指向包含我使用的所有图形文件的完整项目的链接.
Emulator_2.2_API8_WVGA800-240_v1:
(注意:在上面的模拟器截图中,标有"G2平台"的图标可能应该标记为"运行平台",因为显示的图形来自当前运行的Android平台 - 而不是来自G2平台.我也是懒得纠正这个.)
Emulator_2.2_API8_WVGA800-240_v2:
G2_v1:
G2_v2:
(请注意,在创建和复制这些图形时,我仔细遵循了图标设计指南.)
AndroidManifest.xml:
<?xml version="1.0" encoding="utf-8"?>
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
package="fubar.guiexamples"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="8" />
<supports-screens
android:smallScreens="true"
android:normalScreens="true"
android:largeScreens="true"
android:anyDensity="true" />
<application
android:icon="@drawable/icon"
android:label="@string/app_name">
<activity
android:name=".MenuIconConfusion"
android:label="@string/app_name">
<intent-filter>
<action
android:name="android.intent.action.MAIN" />
<category
android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
Run Code Online (Sandbox Code Playgroud)
MenuIconConfusion.java:
public class MenuIconConfusion extends Activity
{
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main_options_menu, menu);
return true;
}
}
Run Code Online (Sandbox Code Playgroud)
main_options_menu.xml v1:
<?xml version="1.0" encoding="utf-8"?>
<menu
xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/g2_platform_with_title"
android:icon="@android:drawable/ic_menu_share"
android:title="G2 Platform" />
<item
android:id="@+id/g2_platform_no_title"
android:icon="@android:drawable/ic_menu_share" />
<item
android:id="@+id/platform_10_auto_selection_with_title"
android:icon="@drawable/ic_menu_share"
android:title="Platform 10 Auto" />
<item
android:id="@+id/platform_10_auto_selection_no_title"
android:icon="@drawable/ic_menu_share" />
<item
android:id="@+id/pixels_auto_selection"
android:icon="@drawable/ic_menu_pixels"
android:title="Pixels" />
</menu>
Run Code Online (Sandbox Code Playgroud)
main_options_menu.xml v2:
<?xml version="1.0" encoding="utf-8"?>
<menu
xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/platform_10_hdpi_72_with_title"
android:icon="@drawable/ic_menu_share_p10_hdpi_72"
android:title="Platform 10 72 Copy" />
<item
android:id="@+id/platform_10_hdpi_72_no_title"
android:icon="@drawable/ic_menu_share_p10_hdpi_72" />
<item
android:id="@+id/platform_10_mdpi_48_with_title"
android:icon="@drawable/ic_menu_share_p10_mdpi_48"
android:title="Platform 10 48 Copy" />
<item
android:id="@+id/platform_10_hdpi_72_9_patch_with_title"
android:icon="@drawable/ic_menu_share_p10_hdpi_72_nine_patch"
android:title="Platform 10 72 9p Copy" />
<item
android:id="@+id/platform_10_hdpi_72_9_patch_no_title"
android:icon="@drawable/ic_menu_share_p10_hdpi_72_nine_patch" />
<item
android:id="@+id/pixels_auto_selection"
android:icon="@drawable/ic_menu_pixels"
android:title="Pixels" />
</menu>
Run Code Online (Sandbox Code Playgroud)
关于截图和代码的一些澄清:
正如我为这个演示所做的那样,我明白我们不应该使用android:drawable中的图形,原因是菜单图标设计指南中描述的原因.
对于某些图标,我每次都会显示两次 - 每次都有一个标题,每次都没有标题 - 看看是否有一个标题会影响选择哪个图形以及所选图形是否缩放.
标有"Platform 10 48 Copy"的图标是一个48 x 48像素的图形,从Android SDK平台10 drawable-mdpi文件夹复制而来.
两个浅色图标来自九个补丁图像.请注意,它们没有缩放特征.
包含"72"图标表示正在运行的平台确实正在自动选择drawable-hdpi资源,正如预期的那样.如果使用drawable-hdmi资源,则显示的数字将为"48".
可能的问题:
简而言之,我没想到这些屏幕截图中显示的结果很多.虽然我确实期望使用drawable-hdpi 72 x 72图形,但我也希望它们能够显示相关标题的足够空间.所以...
我可能会问,"如何让菜单图标图形按比例缩放,以留出空间来显示相关标题?"
我可能会问,"我们真的应该使用什么尺寸的图形菜单图标,永远不要说明官方文档说的是什么?"
我可能会问,"这到底是怎么回事?我不理解什么?"
带有我使用过的图片的Android项目文件可以从https://sites.google.com/site/androidguiexamples/home/downloads/MenuIconConfusion.zip下载.
您的所有图标都在该res/drawable
目录中。所以我认为操作系统会自动缩放你的图标,使它们显示为不正确的尺寸。应根据图标的目标 dpi 级别将它们分成不同的目录。72x72 图标进入res/drawable-hdpi
,48x48 进入res/drawable-mdpi
,36x36 进入res/drawable-ldpi
。请注意,它们都应该具有相同的名称。
res/drawable-hdpi/ic_menu.png
res/drawable-mdpi/ic_menu.png
res/drawable-ldpi/ic_menu.png
Run Code Online (Sandbox Code Playgroud)
然后在您的菜单布局中只需使用 引用图像@drawable/ic_menu.png
。然后,操作系统将根据运行设备的 dpi 确定使用哪一个。
正如 Joseph Earl 所说,它们不应该是 9 块图像。