Menü-Symbol, Verwirrung - Sie sind zu groß!
Auf eine "normale" Größe Bildschirm hdpi-Gerät, ich verstehe, dass 72 x 72 Pixel-Grafiken verwendet werden sollten, und Sie sollten ansonsten Folgen Sie das Icon-Design Richtlinien (was einige der Plattform-Grafik-interessanterweise nicht tun). Wenn ich versuche, dies zu tun durch meine eigene neue Grafiken oder durch kopieren einer Grafik-Datei aus dem Android-SDK, aber die Grafik im Menü ist zu groß, und es zwingt die Beschriftung, D. H., der Titel, unter dem es erscheint nicht. Wenn ich "Kraft" die Verwendung einer 48 x 48 Pixel-Grafik, dann ist die Größe sieht gut aus und die Beschriftung Platz hat, um zu erscheinen, aber dies scheint nicht die richtige Lösung, da die Grafik-display-Qualität ist vermindert, und die Dokumentation klar sagt ein 72 x 72 Grak verwendet werden soll.
Verstehe ich die 9-patch-Grafiken verwendet werden sollten, um sicherzustellen, die richtige-auf der Suche Skalierung, aber keine Menü-Symbol Grafiken in die Plattform drawable Ordner angezeigt werden, tatsächlich werden 9-patch, wie Sie keine 9-patch-Marker. Für diese screenshots, ich habe noch 9-patch-Marker, um eine Kopie des Android SDK platform-10 72 x 72 hdpi ic_menu_share.png-Grafik. (Die draw9patch.Fledermaus-tool unerwartet verändert die Farben der Grafik.)
In den vier folgenden screenshots zeige ich neun Menü-Symbol zeigt, läuft auf meinem G2, und die auf einem emulator ausgeführt mit G2-Qualitäten: Android 2.2-API 8 WVGA800 240dpi. (Beide Geräte haben "normale" Größe hdpi-Bildschirme.) Da das Menü-Symbol Grafiken zeigen nur sechs in einer Zeit, gibt es zwei screenshots, die für jedes Gerät: v1 und v2. Die folgenden screenshots sind die code-Komponenten verwendet, generieren Sie diese Anwendung, zusammen mit einem link, um das komplette Projekt mit allen Grafik-Dateien, die ich verwendet.
Emulator_2.2_API8_WVGA800-240_v1:
(Hinweis: Im obigen screenshot des emulators, das Symbol mit der Bezeichnung "G2-Plattform" sollte wohl stattdessen die Bezeichnung "Running Platform", da die angezeigte Grafik ist von der gerade Laufenden Android-Plattform - nicht von der G2-Plattform. Ich war nur zu faul, dies zu korrigieren.)
Emulator_2.2_API8_WVGA800-240_v2:
G2_v1:
G2_v2:
(Bitte beachten ich sorgfältig befolgt das Icon-Design Richtlinien beim erstellen und kopieren dieser Grafiken.)
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>
Einige Klarstellungen zu den Screenshots und Code:
Als ich für diese demo, ich verstehe, dass wir nicht sollen, verwenden Sie Grafiken aus android:drawable, aus den beschriebenen Gründen in das Menü-icon-design-Richtlinien.
Für einige icons, die ich angezeigt Sie jeweils zweimal - einmal mit einem Titel, sowie jeweils einmal ohne Titel - um zu sehen, ob ein Titel beeinflusst die Grafik ausgewählt wurde und ob die ausgewählte Grafik skaliert wurde.
Das Symbol mit der Bezeichnung "Plattform 10 48 Kopieren" ist eine 48 x 48 pixel-Grafik, kopiert aus dem Android SDK-Plattform 10 drawable-mdpi Ordner.
Den beiden helleren farbigen Symbole sind von den neun patch-Bild. Hinweis weisen Sie keine Skalierung der Merkmale.
Die "72" - Symbol enthalten war, zu zeigen, dass drawable-hdpi Ressourcen sind tatsächlich auto-ausgewählt von der Laufenden Plattform, wie erwartet. Waren die drawable-hdmi-Ressourcen, die stattdessen verwendet wird, dann wird die angezeigte Zahl "48".
MÖGLICHE FRAGEN:
Kurz gesagt, ich hatte nicht viel erwartet, der die Ergebnisse angezeigt, die in diesen screenshots. Während ich noch erwarten, dass die drawable-hdpi 72 x 72 Grafiken verwendet werden, ich habe auch erwartet, dass Sie die Anzeige mit genug Platz für den zugehörigen Titel. So...
Ich könnte Fragen, "Wie bekomme ich das Menü-icon-Grafiken skalieren, um Platz zu dislay die zugehörigen Titel?"
Ich vielleicht Fragen, "Was für eine Größe von Grafiken sind wir wirklich soll für Menü-icons, egal was die offizielle Dokumentation sagt?"
Ich vielleicht Fragen, "Was zum Teufel ist hier Los? Was verstehe ich nicht?"
Dem Android-Projekt-Dateien mit den Grafiken, die ich verwendet, heruntergeladen werden kann https://sites.google.com/site/androidguiexamples/home/downloads/MenuIconConfusion.zip
Du musst angemeldet sein, um einen Kommentar abzugeben.
Alle Ihre Symbole sind in der
res/drawable
- Verzeichnis. Also ich finde die OS ist die automatische Skalierung deine icons, so dass Sie wie falsche Größen. Sie sollte aufgeteilt werden in verschiedene Verzeichnisse basierend auf der dpi-Stufe wird das Symbol für die gezielte. 72x72 Symbole gehen inres/drawable-hdpi
, 48x48 gehen inres/drawable-mdpi
und 36x36 gehen inres/drawable-ldpi
. Beachten Sie, dass Sie sollten alle den gleichen Namen haben.Dann im Menü layout nur auf das Bild verweisen mit
@drawable/ic_menu.png
. Wird das OS dann herauszufinden, welche basierend auf der dpi des Geräts, auf dem Sie läuft.Und als Joseph Earl sagt, Sie sollten nicht 9-patch Bilder.
So werden Sie sich vielleicht Fragen, warum Sie immer etwas, das falsch aussieht - einfach Symbole sollten nicht neun-patches, das ist der Grund, warum die bestehenden nicht haben neun-patch-Marker.
Neun-patch verwendet wird, für eine Grafik, die muss geändert werden in einer Weise, die nicht getan werden kann indem Sie einfach scaling/stretching ein Bild (z.B. eine Schaltfläche hintergrund, dehnt der Inhalt, sondern die-Ecke-radius gleich bleibt, oder den Fenster-Titel hintergrund). Also in der Regel ein neun-patch benutzt wird für ein hintergrund-Bild des Typs.