So blenden Sie die BottomNavigationView unten Tastatur mit adjustResize set
Entsprechend der material design spec, wenn die Tastatur erscheint, die BottomNavigationView
zu verstecken darunter. Allerdings, wenn ich android:windowSoftInputMode="adjustResize"
in der Aktivität manifestieren, dann ist die BottomNavigationView
über die Tastatur verschoben.
Ich brauche, um adjustResize
zu aktivieren, einen Bildlauf zum unteren Rand des Bildschirms, während die Tastatur geöffnet ist. Jedoch will ich nicht das BottomNavigationView
sichtbar sein. Kann das getan werden?
Wie es derzeit aussieht:
Den layout-XML (in der Realität wäre ein FrameLayout
wo die EditText
ist und die EditText
wäre drin):
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Input"
android:layout_gravity="center"
android:layout_centerVertical="true"/>
<android.support.design.widget.BottomNavigationView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
app:itemBackground="@color/colorPrimary"
app:menu="@menu/menu_bottom_navigation"
app:itemIconTint="@android:color/white"
app:itemTextColor="@android:color/white"/>
</RelativeLayout>
- Haben Sie das gelöst?
- Nein habe ich nicht, aber ein Vorschlag war, alles zu verstecken hinter der Tastatur, wenn Sie ein Feld angetippt wird, auf (einschließlich der unteren Navigationsleiste) dann, wenn der Benutzer tippt auf dem Bildschirm über die Tastatur oder wird die Tastatur einfach verschwindet. Es ist nicht groß, aber ich denke, es ist eine bessere user experience als die floating nav-bar. Die Spotify-app tut dies.
- Ich habe das gleiche problem... Wenn du eine Lösung finden, bitte sagen Sie mir...
- Hey Alle ! Ich habe eine neue Antwort, die tatsächlich dieses problem löst. Schreiben Sie diese als Kommentar, ich bin sehr spät zu beantworten und die Antwort mit max Stimmen nicht wirklich löst dieses problem sein kann, ist, warum OP noch nicht angenommen haben, ist es noch nicht. Also bitte gehen Sie durch meine Antwort einmal.
InformationsquelleAutor willjgriff | 2017-02-05
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Fügen Sie diese auf Ihre Aktivität in der manifest -
So wie
Lösung (oder ein anderer Weg, dasselbe zu tun)
War ich schon in der exakt gleichen situation wie der OP gesagt, ich hatte eine
BottomNavigationView
offensichtlich am unteren Rand des Bildschirms und oben, dass esScrollView
.Ich denke unten werden zwei Ansätze für das gleiche.
Ansatz 1
Legen Sie die visibility auf gone/sichtbar auf der Tastatur ein - /ausblenden. Es ist schnell zu arbeiten, um für die gleiche. Sie können einen listener für die Tastatur ein - /ausblenden event im nächsten Ansatz es selbst.
Um es interessant Aussehen, können Sie versuchen, das anzeigen/ausblenden BottomNavigationView mit einer Art von animation.
Ansatz 2
Etwas besser Weg (das material design Weg) wäre mit
CoordinatorLayout
- und scrolling-Verhalten (wie Sie vielleicht gesehen habenCollapsingToolBar
).Unten wäre die layout-Datei
Das ist es, jetzt Sie sehen können die BottomNavigationView versteckt/zeigt auf das scrollen nach unten und oben etc. Aber es gibt ein anderes problem, das Sie konfrontiert werden könnten, in einem Szenario, d.h. wenn die Tastatur ausgeblendet ist, wenn der Inhalt ist zu klein, um zu Blättern,
Und das problem ist, dass, wenn die Tastatur geöffnet wird, und Sie Blättern Sie zu der Unterseite verbirgt die BottomNavigationView, jetzt, wenn Sie drücken Sie die zurück-Taste Tastatur blendet aber die BottomNavigationView noch verborgen bleibt. Nun, wie Inhalt ist nicht Scrollbar, so dass, wenn Sie versuchen, um zu Blättern, ist es nicht zeigen, BottomNavigationView. Es offenbaren sich wieder, was Sie tun müssen ist, stellen Sie die Tastatur wieder sichtbar und dann scroll nach oben, wenn BottomNavigationView angezeigt wird, dann drücken Sie die Taste zurück.
Habe ich versucht dieses problem zu lösen, auf diese Weise,
Fügen Sie einen Globalen Listener um herauszufinden, ob die Tastatur ein-oder ausgeblendet ist. Der code, den ich hier verwendet wurde, (es ist in Kotlin, jedoch können Sie ganz einfach konvertieren, um die Java-version wenn Sie das brauchen)
Und das Letzte, was, wenn Sie Support Library version 28.0.0 dann werden Sie sehen, dass
behavior.slideUp(navigation)
- Methode ist geschützt, so dass Sie können nicht nennen es von Ihrer Aktivität etc.Jedoch Googles Android-team bereits gemacht hat, diese Methoden öffentlich in new
material-components
. Überprüfen Sie diese so einfach importieren Sie material-Komponenten in Ihrem Projekt und verwenden Sie diese Klasse, statt.Abgesehen davon können Sie versuchen, einige weitere Experimente, wie programmgesteuert aufrufen slideUp oder slideDown auf der Tastatur ein - /ausblenden etc.
P. S. ich habe gute Menge an Zeit zu kommen, um diese arbeiten Herangehen, so dachte, es zu teilen, so dass Sie retten könnte jemand die Zeit.
Gibt es eine andere Lösung, die nicht erfordert
adjustSpan
, aber es funktioniert nur für dieAPI >= 21
. Sie können erkennen, wenn die Tastatur angezeigt/versteckt-tracking-system-Einsätze. Sagen SieBottomNavigationView
, das KindLinearLayout
und Sie müssen, um es zu verstecken, wenn die Tastatur angezeigt wird:Alles, was Sie tun müssen, ist zu erweitern
LinearLayout
so:Die Idee ist, dass, wenn die Tastatur angezeigt wird, system-Einsätze geändert, mit ziemlich großen
.bottom
Wert.fügen Sie die folgende Zeile in Ihrem manifest : android:windowSoftInputMode="adjustPan"
Als alternative Weg mit deinem
android:windowSoftInputMode="adjustResize"
Sie können versuchen, diese.rufen Sie diese Methode aus Ihrer
OnCreate
- sobald die Tastatur ist, können Sie zum ändern der Sichtbarkeit von Ansichten, die Sie brauchen nicht zu zeigen!Wenn die Tastatur nach unten zeigt Sie wieder.
View.GONE
eher alsView.INVISIBLE