Seitenlauf, wenn die Softtastatur auftauchte


99

Ich habe ein <ScrollView>Layout:

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/my_scrollview"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    >

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" >

        <EditText
            android:id="@+id/input_one"
            android:layout_width="300dp"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:inputType="number" >

         <EditText
            android:id="@+id/input_two"
            android:layout_width="300dp"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:inputType="number" >

         <EditText
            android:id="@+id/input_three"
            android:layout_width="300dp"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:inputType="number" >

          <Button
            android:id="@+id/ok_btn"
            android:layout_width="200dp"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:layout_marginTop="20dp"
            android:text="@string/ok_str" />

      </LinearLayout>
</ScrollView>

Wie Sie oben sehen, besteht das einfache Layout aus drei Eingabefeldern und einer Schaltfläche "OK".

Ich meine app mit dem oben Layout laufen, wenn ich auf dem ersten Eingabefeld tippen ( @+id/input_one), die Soft - Tastatur wird vom unteren Rand des Bildschirms auftauchen, es verbirgt sich das dritte Eingabefeld und die Schaltfläche „Ok“.

Da ich benutze <ScrollView>, dachte ich, ich kann die Seite nach oben scrollen, um das 3. Eingabefeld und die Schaltfläche "Ok" zu sehen, die von der Softtastatur ausgeblendet werden, aber die Seite kann nicht gescrollt werden . Warum? Wie kann man es loswerden? Grundsätzlich möchte ich, dass alle Eingabefelder und die Schaltfläche "Ok" auch die Softtastatur angezeigt wird.


1
Entfernen Sie die <ScrollView>, LinearLayout sollte Ihr äußeres Layout sein, es wird funktionieren, ich hoffe, auch wenn das Sofkeyboard auftaucht.
Abid A. Chaudhary

1
@pakshaheen Damit wird das Problem nicht behoben, wenn eine Bildlaufansicht erforderlich ist.
Lauten

Antworten:


124

Ich reparierte das Problem durch das Definieren Sie das folgende Attribut in <activity>der AndroidManifest.xml

android:windowSoftInputMode="adjustResize"

12
Sie brauchen stateVisible nicht. Dadurch wird die
Softtastatur

Es ist automatisch geöffnete Tastatur, auch wenn es keinen Edittext gibt
Mr X

37

Ok, ich habe jetzt mehrere Stunden gesucht, um das Problem zu finden, und ich habe es gefunden.

Keine der Änderungen hat mir gefallen fillViewport="true"oder android:windowSoftInputMode="adjustResize"mir geholfen.

Ich benutze Android 4.4 und das ist der große Fehler :

android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"

Irgendwie verhindern die Vollbild-Designs, dass die ScrollViews scrollen, wenn das SoftKeyboard sichtbar ist.

Im Moment habe ich stattdessen Folgendes verwendet:

android:theme="@android:style/Theme.Black.NoTitleBar

Ich weiß nicht, wie ich die obere Systemleiste mit Zeit- und Batterieanzeige loswerden soll, aber zumindest habe ich das Problem.

Hoffe das hilft anderen, die das gleiche Problem haben.

EDIT: Ich habe eine kleine Problemumgehung für meinen Fall bekommen, also habe ich sie hier gepostet :

Ich bin mir nicht sicher, ob dies für Sie funktionieren wird, aber es wird Ihnen definitiv helfen, einige Dinge zu verstehen und zu klären.

EDIT2: Hier ist ein weiteres gutes Thema, das Ihnen hilft, in die richtige Richtung zu gehen oder sogar Ihr Problem zu lösen.


+1 In meinem Fall wurde die Statusleiste von einer Drittanbieter-Bibliothek im Code ausgeblendet: getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
de.

@qweret Was ist, wenn ich beide brauche? Vollbild und Scrollen.
Prabs

@Prabs Hast du eine Lösung gefunden? Ich möchte auch sowohl Vollbild als auch Scrollen.
Johny

@ Johny Nope. Im Moment verwende ich den Vollbildmodus für die gesamte App mit Ausnahme dieser Aktivität mit Scrollen3.
Prabs

@Prabs Die einzige Lösung, die ich dachte, ist eine transparente Statusleiste, aber in meinem Fall ist dies immer noch ein Problem, da ich API> = 16 unterstützen möchte. Hast du irgendeine Idee?
Johny

20

Für mich ist das einzige, was funktioniert, die Aktivität im Manifest dieses Attributs:

android:windowSoftInputMode="stateHidden|adjustPan"

Die Tastatur beim Öffnen der Aktivität nicht anzeigen und den unteren Rand der Ansicht nicht überlappen.


14

Fügen Sie dies wie folgt in Ihr Manifest ein, ohne Vollbildmodus

android:windowSoftInputMode="stateVisible|adjustPan" 

in deinem Manifest

<activity
    android:windowSoftInputMode="stateVisible|adjustPan"
    android:name="com.example.patronusgps.MainActivity"
    android:label="@string/app_name" >
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />

        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

1
Ich habe es versucht, aber leider kein Glück ... Die Root-Ansicht ist jedoch nicht a ScrollView, sondern a, RelativeLayoutdie a enthält, LinearLayoutdas dann a enthältScrollView
James Heald


8

Schau dir das an.

<activity android:name=".Calculator"
    android:windowSoftInputMode="stateHidden|adjustResize" 
    android:theme="@android:style/Theme.Black.NoTitleBar">
</activity>

3

Das hat nur bei mir funktioniert:

android:windowSoftInputMode="adjustPan"

2

Wenn Sie dies programmgesteuert tun möchten, fügen Sie einfach die folgende Zeile zum onCreate der Aktivität hinzu.

getWindow().setSoftInputMode(
            WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE | 
            WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE );

1

Sie können versuchen, den folgenden Code zu verwenden, um Ihr Problem zu lösen:

 <activity
     android:name=".DonateNow"
     android:label="@string/title_activity_donate_now"
     android:screenOrientation="portrait"
     android:theme="@style/AppTheme"
     android:windowSoftInputMode="stateVisible|adjustPan">
 </activity>

17
Sie sollten sich die Mühe machen, zu erklären, was Ihr Code tut, anstatt nur einen trockenen Stückcode als Antwort zu veröffentlichen.
Angel Politis

0

Nun, die einfachste Antwort, die ich versucht habe, ist, einfach Ihren Code zu entfernen, wodurch die Aktivität im Vollbildmodus angezeigt wird. Ich hatte einen Code wie diesen, der dafür verantwortlich war, dass meine Aktivität im Vollbildmodus ausgeführt wurde:

if (Build.VERSION.SDK_INT> = Build.VERSION_CODES.KITKAT) {

        getWindow().setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,
                WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
    }

Ich habe gerade meinen Code entfernt und er funktioniert einwandfrei. Wenn Sie dies jedoch mit eingeschaltetem Vollbildmodus erreichen möchten, müssen Sie einige andere Methoden ausprobieren

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.