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.

Leem.fin
quelle
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
Hier ist der Arbeitscode. stackoverflow.com/questions/7417123/…
Venkat

Antworten:

124

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

android:windowSoftInputMode="adjustResize"
Leem.fin
quelle
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.

qweret
quelle
+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.

Jachumbelechao nach Mantekilla
quelle
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>
user3594530
quelle
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
11

In Ihrer Eigenschaft Manifestdefine windowSoftInputMode:

<activity android:name=".MyActivity"
          android:windowSoftInputMode="adjustNothing">
Mohammad Ersan
quelle
2
@ JacobRas überprüfen Sie bitte diesen Link: developer.android.com/reference/android/… es hat den Wert "adjustNothing" :)
Mohammad Ersan
2
Ich habe die gleichen Probleme, aber die Bildlaufansicht funktioniert nicht mit adjustNothing :(
Narendra Singh
8

Schau dir das an.

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

Das hat nur bei mir funktioniert:

android:windowSoftInputMode="adjustPan"
Blueware
quelle
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 );
ucMedia
quelle
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>
Энхжин Амарсайхан
quelle
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

Akash Gupta
quelle