2012-06-03 4 views
16

Ich habe ein einfaches Testprojekt zusammengewürfelt, das ein PopupWindow mit einem EditText (auf Android 2.2) anzeigt. Wenn ich auf den EditText tippe, wird wie erwartet die Soft-Tastatur angezeigt. Die Soft-Tastatur deckt jedoch den EditText ab, und ich kann den Bildschirm nicht zum Schwenken bringen, um den EditText so im Blick zu behalten, wie ich es hätte finden sollen. Mein Code:Soft-Tastatur deckt einen EditText in einem PopupWindow

TestAdjustPanActivity.java:

package com.example; 

import android.app.Activity; 
import android.graphics.drawable.BitmapDrawable; 
import android.os.Bundle; 
import android.view.Gravity; 
import android.widget.PopupWindow; 

public class TestAdjustPanActivity extends Activity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     final PopupWindow pw = new PopupWindow(this); 
     pw.setContentView(getLayoutInflater().inflate(R.layout.popup, null, false)); 
     pw.setWidth(400); 
     pw.setHeight(600); 
     pw.setFocusable(true); 

     pw.setOutsideTouchable(true); 
     pw.setTouchable(true); 
     pw.setBackgroundDrawable(new BitmapDrawable()); 

     // This is the line referred to in the edit: 
     pw.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN); 

     findViewById(R.id.main).post(new Runnable() { 
      public void run() { 
      pw.showAtLocation(findViewById(R.id.main), Gravity.NO_GRAVITY, 0, 0); 
      } 
     }); 
    } 
} 

main.xml:

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

    <TextView 
     android:id="@+id/text" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:text="@string/hello" /> 

</LinearLayout> 

popup.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" > 

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

     <EditText 
      android:id="@+id/current_password" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:layout_marginBottom="40dp" 
      android:layout_marginLeft="10dp" 
      android:layout_marginRight="10dp" 
      android:layout_marginTop="300dp" /> 
    </LinearLayout> 

</ScrollView> 

... und meine AndroidManifest.xml enthält Die Zeile android:windowSoftInputMode="stateUnspecified|adjustPan" im Tag für die einzige Aktivität in der App.

Irgendwelche Ideen? Keiner der anderen Beiträge in Bezug auf SO zu diesem Thema hat es für mich getan. Was vermisse ich, dass die Aussicht vom Schwenken so bleibt, wie ich es erwarten würde?

EDIT: Ich habe versucht, eine Zeile in TestAdjustPanActivity wie angegeben hinzufügen, die den Bildschirm auf einem Android 3.2-Gerät, das ich habe, perfekt schwenken. Allerdings schwenkt es immer noch nicht auf meinem Android 2.2-Gerät, was das Ganze noch verwirrender macht.

Antwort

4

Für jeden auf diese in die Zukunft stolpern, landete ich nur einen Dialog mit anstelle eines PopupWindow , und Panning, um den EditText im Blick zu behalten, funktioniert auf 2.2 mit einem Dialog gut.

0

sollten Sie

ändern
android:windowSoftInputMode="stateUnspecified|adjustPan 

zu

android:windowSoftInputMode="stateHidden|adjustPan" 
+0

Meh, leider kein Glück. Trotzdem danke! – Lewis

3

Es einfacher Weg ist. Stellen Sie nur ein alternatives Layout für die aktive Tastatur bereit.

  1. Klicken Sie mit der linken Maustaste auf das Projekt, wählen Sie: "Android tools/New Resource File ...".
  2. Wählen Sie Layout, geben Sie den Dateinamen "main" (keine Sorgen über Konflikte).
  3. Klicken Sie auf "Weiter". Wählen Sie dann in der linken Liste "Tastatur" und bewegen Sie sie nach rechts (klicken Sie auf "->").
  4. Auf der rechten Seite den Tastaturstatus auswählen.
  5. Klicken Sie auf Fertig stellen.
  6. Jetzt Inhalt Ihrer main.xml kopieren in "res/layout" befindet sich auf neue Datei in res/Layout-keyssoft“.
  7. Correct neue Layout in einer solchen Art und Weise, dass Tastatur nicht in dieser Art und Weise ist. Denken Sie daran, diese zu pflegen „id“ s für die jeweiligen Komponenten in diesen beiden Layouts (dh warum Paste kopieren wurde erforderlich).
  8. Genießen sie, wie es funktioniert

über Lesen configuration changes zu verstehen, wie es funktioniert. Beachten sie, dass jede Konfigurationsänderung (Orientierung Änderung, Sprachwechsel, ...) führt zur Wiederherstellung der Aktivität (in diesem Fall ist das Argument onCreate nicht null), so dass Sie verschiedene Layouts für unterschiedliche bereitstellen können Fälle.

+0

Laut der Android-Dokumentation funktioniert das nur, wenn sich die tatsächliche Verfügbarkeit einer Tastatur ändert, nicht, wenn sie einfach nur angezeigt oder versteckt wird, leider. Sie erwähnen jedoch die keyboardHidden-Eigenschaft der Configuration-Klasse, die ich mir ansehen werde. Vielen Dank! – Lewis

1

Ich bezweifle das Problem wegen der Verwendung ist, dass ScrollView in XML,

Es hierzu ein weiteres Problem ähnlich gewesen ist, Sie können check all different answers there und kann für Sie arbeiten.

1

Änderung dieser

android:windowSoftInputMode="stateUnspecified|adjustPan" 

zu

android:windowSoftInputMode="adjustPan" 

nur in Ihrer Manifest-Datei

Verwandte Themen