Значки меню путаницы - они слишком большие! - PullRequest
5 голосов
/ 03 апреля 2011

На устройстве hdpi с экраном "нормального" размера я понимаю, что следует использовать графику 72 x 72 пикселя, в противном случае она должна следовать Руководству по проектированию иконок (что интересно для некоторых графических платформ.делать).Однако, когда я пытаюсь сделать это, создавая собственную новую графику или копируя графический файл из Android SDK, изображение в меню оказывается слишком большим, и оно вызывает текстовую метку, то есть заголовок, который должен быть нижеэто не появиться.Если я «принудительно» использую графику 48 x 48 пикселей, то размер выглядит хорошо, и текстовая метка имеет место для отображения, но это не похоже на правильное решение, так как качество графического дисплея ухудшается, иВ документации четко сказано, что следует использовать графику 72 x 72.

Я понимаю, что для обеспечения правильного масштабирования следует использовать графику из 9 патчей, но ни одна из графических значков меню в папках на платформе не отображается.на самом деле быть с 9 патчами, так как у них нет маркеров с 9 патчами.Для этих снимков экрана я добавил маркеры с 9 патчами в копию платформы 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: Emulator_2.2_API8_WVGA800-240_v1

(Note: In the above screenshot of the emulator, the icon labeled "G2 Platform" should probably instead be labeled "Running Platform", since the displayed graphic is from the currently running Android platform - not from the G2 platform. I was just too lazy to correct this.)

Emulator_2.2_API8_WVGA800-240_v2:
Emulator_2.2_API8_WVGA800-240_v2

G2_v1:
G2_v1

G2_v2:
G2_v2

(Please note I carefully followed Руководство по проектированию значков при создании и копировании этих графических изображений.)

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>

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;
  }
}

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>

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>

Некоторые пояснения, касающиеся скриншотов и кода:

Как я сделал для этой демонстрации, я понимаю, что мы не должны использовать графику с Android:по причинам, описанным в руководящих указаниях по проектированию значков меню .

Для некоторых значков я отображал их по два раза - по одному с заголовком и по одному без заголовка -чтобы увидеть, повлияло ли наличие заголовка на то, какой рисунок был выбран и масштабирован ли выбранный рисунок.

Значок с надписью «Платформа 10 48 Копирование» представляет собой изображение размером 48 x 48 пикселей, скопированное с платформы Android SDK 10 с возможностью рисованияПапка -mdpi.

Две светлые цветные иконки взяты из девяти патчей.Обратите внимание, что они не имеют характеристик масштабирования.

Значок «72» был включен, чтобы показать, что ресурсы drawable-hdpi действительно автоматически выбираются работающей платформой, как и ожидалось.Если бы вместо этого использовались ресурсы drawable-hdmi, тогда отображаемое число было бы «48».

ВОЗМОЖНЫЕ ВОПРОСЫ:

Короче говоря, я не ожидал многогорезультатов, отображаемых на этих скриншотах.Хотя я ожидал, что будет использоваться графика drawable-hdpi 72 x 72, я также ожидал, что они будут отображаться с достаточным пространством для соответствующих заголовков.Итак ...

Я мог бы спросить: "Как мне масштабировать графику значков меню, чтобы оставить место для отображения связанного с ней названия?"

Я мог бы спросить,«Какой размер графики мы действительно должны использовать для значков меню, не говоря уже о том, что официальная документация говорит?»

Я мог бы спросить: «Что за черт?что здесь происходит? Что я не понимаю? "

Файлы проекта Android с графикой, которую я использовал, можно загрузить с https://sites.google.com/site/androidguiexamples/home/downloads/MenuIconConfusion.zip

Ответы [ 2 ]

3 голосов
/ 03 апреля 2011

Все ваши значки находятся в каталоге 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

Затем в макете вашего меню просто укажите ссылку на изображение, используя @drawable/ic_menu.png. Затем ОС определит, какую из них использовать, основываясь на dpi устройства, на котором она работает.

И, как говорит Джозеф Эрл, они не должны быть изображениями с 9 патчами.

2 голосов
/ 03 апреля 2011
  1. Система Android выберет значки HDPI для указанной вами цели
  2. Это оставит достаточно места для текста на значках

Так что вам может быть интересно, почему вы получаете что-то, что выглядит неправильно - просто значки не должны быть с девятью патчами , поэтому существующие не имели маркеров с девятью патчами.

Девять патчей используются для графики, размер которой необходимо изменить таким образом, который нельзя сделать простым масштабированием / растяжением изображения (например, фон кнопки, который расширяется, чтобы заполнить содержимое, но угловой радиус остается прежним или фон заголовка окна). Поэтому обычно для фонового изображения некоторого типа используется патч из девяти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...