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:
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
ist die gewünschte Ausgabe:
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. –
@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. –
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 –