8

Ich arbeite an einem Spiel und ich möchte eine EditText-Position über der Soft-Tastatur, wenn es auftaucht. HierEinen EditText über eine Soft-Tastatur mit einem GL haben View im Hintergrund programmatisch

ist, was mein Code wie folgt aussieht, wenn ich die Ansicht Hierarchie in meiner Hauptaktivität bauen:

getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN | WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS); 

viewGroup = new RelativeLayout(this); 
    viewGroup.setLayoutParams(new ViewGroup.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); 
    view = new GameView(this); 
     RelativeLayout.LayoutParams vLayoutParams = new RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); 
     vLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_TOP); 
     view.setLayoutParams(vLayoutParams); 
     viewGroup.addView(view); 

    editText = new GameEditText(this); 
     RelativeLayout.LayoutParams etLayoutParams = new RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); 
     etLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM); 
     editText.setGravity(Gravity.BOTTOM); 
     editText.setLayoutParams(etLayoutParams); 
    viewGroup.addView(editText); 

setContentView(viewGroup); 

Hier ist mein AndroidManifest.xml (der Teil der Angelegenheiten):

<activity 
    android:name="app.ember.MainActivity" 
    android:theme="@android:style/Theme.NoTitleBar.Fullscreen" 
    android:launchMode="singleTask" 
    android:configChanges="orientation|keyboardHidden|screenSize" 
    android:screenOrientation="sensorLandscape" 
    android:windowSoftInputMode="adjustResize" 
    > 
    <intent-filter> 
     <action android:name="android.intent.action.MAIN" /> 
     <category android:name="android.intent.category.LAUNCHER" /> 
    </intent-filter> 
</activity> 

Zusatz Information:

  • GameView = ist ein GLSurfaceView
  • GameEditText = ist ein EditText
  • Wenn ich die erste Zeile auskommentiere (getWindow(). AddFlags ...) Dann schwenkt die Spielansicht nach oben und die Ansicht ist nicht sichtbar, es sei denn ich fange an Dinge zu tippen.
  • verlassen, dass die erste Zeile in macht das Spiel nicht verschieben, aber nicht das editText Feld nach oben bewegen und die Tastatur umfasst die editText Feld

Irgendwelche Vorschläge?

Hier sind einige Phantasie Screenshots:

Spiel No Keyboard:

Game With No Keyboard

Spiel mit Tastatur und WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN | WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS Satz (wie es in dem Monitor sieht Layer-Hierarchie zeigen):

Spiel mit Tastatur und diese Flaggen nicht festgelegt. Hier enter image description here

ist die gewünschte Ausgabe: Desired Output

+0

Könnten Sie nicht die EditText Platz in der neu einstellen Center versteckt, dann zeigen Sie es, wenn Sie die Tastatur zeigen? Lassen Sie die Flags nicht gesetzt, so dass die Tastatur unter dem EditText platziert wird. –

+0

@Dave S Danke für die Antwort, Leider möchte ich den EditText um die Oberseite der Tastatur zu umarmen. Der EditText in der Mitte des Bildschirms würde funktionieren, aber das ist nicht das gewünschte UI-Design, weil es auf Geräten mit mehr vertikalem Platz nicht gut aussehen würde. Ich habe Code, der das EditText-Objekt als sichtbar/unsichtbar setzt, wenn der Benutzer Text im Spiel bearbeiten muss. Der Benutzer greift nicht auf das EditText-Objekt zu, um die Tastatur anzuzeigen. Stattdessen tippt der Benutzer irgendwo im Spiel und löst aus, um die Tastatur anzuzeigen und dann den EditText so einzustellen, dass er sichtbar und editierbar ist. –

+0

Nun, Sie können wahrscheinlich manuelle Anpassungen basierend auf den Änderungen der Layouthöhe vornehmen, wenn die Tastatur anzeigt. Siehe diesen Link für mehr: http://stackoverflow.com/questions/16788959/is-there-any-way-in-android-to-get-the-height-of-virtual-keyboard-of-device –

Antwort

-1

gebe Editbox als Mutterboden.

android:layout_alignParentBottom="true" 

und in der Manifest-Datei macht den Soft-Input adjustResize/Pan

android:windowSoftInputMode="adjustResize" 

"adjustResize": Das Hauptfenster der Tätigkeit immer für die Soft-Tastatur auf dem Bildschirm, um Platz der Größe verändert wird.

"adjustPan": Das Hauptfenster der Aktivität wird nicht skaliert, um Platz für die Soft-Tastatur zu schaffen. Stattdessen wird der Inhalt des Fensters automatisch geschwenkt, so dass der aktuelle Fokus niemals von der Tastatur verdeckt wird und Benutzer immer sehen können, was sie gerade schreiben. Dies ist im Allgemeinen weniger wünschenswert als eine Größenanpassung, da der Benutzer möglicherweise die Soft-Tastatur schließen muss, um sich mit verdeckten Teilen des Fensters zu befassen und mit diesen zu interagieren.

prüfen this für mehr

+0

Wenn Sie sich meinen Code ansehen, macht er genau das. Auch mein Manifest ist auf "adjustResize" eingestellt. –

-1

In manifest Add

android: windowSoftInputMode = "adjustPan"

Es wird automatisch die Tastatur unterhalb Ihrer EditText

Verwandte Themen