Ich habe App-Leisten mit erweiterter Höhe in den Richtlinien für Google Design App- Leisten gesehen. Wie implementiere ich diese in Android Lollipop?
Ich habe App-Leisten mit erweiterter Höhe in den Richtlinien für Google Design App- Leisten gesehen. Wie implementiere ich diese in Android Lollipop?
Antworten:
Sie müssen das neue Symbolleisten- Widget verwenden, um dies zu erreichen. Die Symbolleiste verfügt über eine spezielle Behandlung für die Mindesthöhe, um den Platz anzugeben, der für Schaltflächen (und Aktionen) verwendet wird.
Im folgenden Beispiel stellen wir die Höhe auf 128 dp ein (dies entspricht 56 dp + 72 dp, wie in der Spezifikation definiert), behalten jedoch android:minHeight
die Standardeinstellung bei actionBarSize
(normalerweise 56 dp). Dies bedeutet, dass die Schaltflächen und Aktionen nur vertikal in den oberen 56 dp positioniert werden müssen. Wir können dann verwenden, android:gravity
um den Titel unten zu positionieren.
<Toolbar
android:id="@+id/toolbar"
android:layout_height="128dp"
android:layout_width="match_parent"
android:minHeight="?android:attr/actionBarSize"
android:background="?android:attr/colorPrimary"
android:gravity="bottom" />
Wenn Sie AppCompat verwenden, ändern Sie die zu verwendende Deklaration android.support.v7.widget.Toolbar
und verwenden Sie deren Attribute.
@dimen/action_bar_size_x2
skalieren Sie die Aktionsleiste in Schritten, z. B. , und verwenden Sie 112dp auf Telefonen, 128dp auf Tablets
android:paddingBottom
führt einen seltsamen Abstand ein, wenn eingestellt buttonGravity
ist bottom
. Das titleMarginBottom
Attribut scheint hier die bessere Option zu sein, oder?
Vielen Dank für Ihre Frage, ihre Antwort und darüber hinaus für die Implementierung der Symbolleiste in der nativen und der Support-Bibliothek :)
Und wir können mehr spielen. Wir können zur Laufzeit mit der Höhe und der minimalen Höhe spielen.
Die Höhe ist die Höhe der ToolBar, sie ist einfach, jeder Körper versteht sie und die Schwerkraft wirkt entsprechend dieser Höhe.
Die minimale Höhe ist kniffliger und sollte nicht mindestens 56 dp betragen. Diese minHeight wird verwendet, um die Zeile Ihres menuItem zu platzieren. Diese Zeile befindet sich in der Mitte Ihrer Mindesthöhe.
Sie können diesen Code also zu Ihrer Aktivität hinzufügen, um den Unterschied selbst zu erkennen. :) :)
Runnable toolBarAnimator=new Runnable() {
@Override
public void run() {
if(postICS){
// toolbar.setTranslationX(iteration);
// toolbar.setElevation(iteration);
toolbar.setMinimumHeight(iteration * 5);
toolbar.getLayoutParams().height++;
}
uiThreadHanlder.postDelayed(this,16);
iteration++;
if(iteration>150)iteration=0;
}
};
Handler uiThreadHanlder=new Handler();
int iteration=0;
@Override
protected void onResume() {
super.onResume();
//launch the animation
uiThreadHanlder.postDelayed(toolBarAnimator, 1000);
}
@Override
protected void onPause() {
super.onPause();
//stop the animation
uiThreadHanlder.removeCallbacks(toolBarAnimator);
}
Wo sich die Symbolleiste befindet:
toolbar = (Symbolleiste) findViewById (R.id.toolbar);
Wenn Sie dies tun, erhalten Sie:
Wenn Sie die Animation jedoch fortsetzen, erhalten Sie:
Aus diesem Grund ist es in den meisten Fällen eine gute Option, die Symbolleiste android: layout_height auf wrap_content zu setzen, da die Symbolleiste ihre Höhe an den Inhalt anpasst (und Sie den Inhalt zur Laufzeit ändern können :)
Auf diese Weise können Sie auch die Größe Ihrer Symbolleiste zur Laufzeit ändern.
Vielen Dank an Chris Banes für die großartige Arbeit, die Sie an der Actionbar geleistet haben.
boolean postICS = Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN;
layout_height
der richtige Weg ist, erwarte ich, dass die hier vom Monsun beschriebene Problemumgehung auch keine Problemumgehung ist, sondern der richtige Weg? code.google.com/p/android/issues/detail?id=77874