2016-05-30 5 views

Antwort

1

Wenn Sie die Standard-Material-Taste verwenden, verwenden Sie sie einfach. Es ist in Ordnung für die meisten Dinge. Material Thema für Button ist definiert als:

<!-- Bordered ink button --> 
<style name="Widget.Material.Button"> 
    <item name="background">@drawable/btn_default_material</item> 
    <item name="textAppearance">?attr/textAppearanceButton</item> 
    <item name="minHeight">48dip</item> 
    <item name="minWidth">88dip</item> 
    <item name="stateListAnimator">@anim/button_state_list_anim_material</item> 
    <item name="focusable">true</item> 
    <item name="clickable">true</item> 
    <item name="gravity">center_vertical|center_horizontal</item> 
</style> 

Wie Sie das minHeight Attribut wird auf 48dp sehen können, was bedeutet, dass diese Taste hoch mindestens 48dp sein wird. Was ist schlimm daran ist, dass der Hintergrund von Button hat Einsätze, was bedeutet, dass zusätzliche Touch-Bereich durch einige transparente Pixel um eine Schaltfläche erreicht wird. Es macht Tasten wirklich richtig Layout schwer, wie in der folgenden SO Beitrag:

How to align Material buttons with other UI elements

Ein solches Widget Design wirklich Layout Gebäude Optionen begrenzt. Die Richtlinien beschreiben ein Touch-Ziel als einen externen, zusätzlichen Touch-Bereich, der ein Widget beeinflussen sollte. Es soll wie folgt geschehen:

  • den Standard-Hintergrund mit einer runden rect Form mit 2dp Radius
  • Satz minHeight setTouchDelegate 36dp
  • Verwendung überschreiben
  • Touch-Ziel zu ändern oder überschreiben getHitRect Note zu ändern Ziel

See:

https://developer.android.com/reference/android/view/TouchDelegate.html

https://developer.android.com/reference/android/view/View.html#getHitRect(android.graphics.Rect)

+0

Vielen Dank für Ihre ausführliche Erklärung. Sie meinen also, dass das Setzen von minHeight auf 48dip die Anforderung von "touch target size" erreicht, oder wird es durch den importierten Stil "Widget.Material.Button" erzeugt? Ich frage das becoz ich bin neugierig, dass es keine Richtlinie gibt, einen benutzerdefinierten Knopf ähnlich einem materiellen Knopf mit der so genannten "Berührungszielgröße" zu machen. –

+0

Einstellung von minHeight auf 48dp setzt sowohl ein Touch-Rect- als auch ein Rect-Rect-Verfahren auf 48dp, und das ist "Widget.Material.Button". Sie schneiden die Zeichnung rect von dieser Größe mit Formeinsätzen ab. Ich würde minHeight lieber auf 36dp setzen und den Touch-Rect mit einer der beiden genannten Methoden erweitern. – Zielony

+0

Wo finde ich das Zeichen "@ drawable/btn_default_material"? –

1

Material Design ist eine Design-Spezifikation und spricht daher viel über das "Was" und nicht viel über das "Wie". Die Berührungszielgröße basiert auf dem, was im Laufe der Jahre als die minimale Größe gefunden wurde, die ein Widget sein sollte, um mit dem Finger einer durchschnittlichen Person leicht interagiert zu werden. Wenn Sie bei Themen und Stilen bleiben, die von Google definiert wurden (z. B. AppCompat-Designs), sollten Sie in Ordnung sein. Wenn Sie vollständig benutzerdefinierte Designs verwenden (was ich Ihnen persönlich nicht empfehlen würde), müssten Sie Ihre Widgets mit einer minWidth und/oder minHeight von 48dp formatieren.