2012-03-18 6 views
8

Chciałbym otworzyć klawiaturę na momencie rozpoczęcia działalności i stwierdziliśmy, żeandroid: windowSoftInputMode = „stateVisible” nie działa

android:windowSoftInputMode="stateVisible" 

nie działa.

Aby upewnić się, stworzyłem nowy projekt (domyślnie "Hello World") i zrobił, co następuje:

  1. dodał windowSoftInputMode do manifestu.
  2. Po że nie działa, dodałem pola EditView do układu
  3. Po że nie działa, dodałem

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE) procedurze onCreate.

Skompilowałem to z Android2.3.3 i próbowałem uruchomić na moim urządzeniu Galaxy S2 i emulatorze Android4 i nadal - bez klawiatury.

Mój plik manifestu:

<?xml version="1.0" encoding="utf-8"?> 

<uses-sdk android:minSdkVersion="9" /> 

<application 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name"> 
    <activity 
     android:name=".HelloworldActivity" 
     android:label="@string/app_name" 
     android:windowSoftInputMode="stateVisible"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

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

Mój układ main.xml:

<?xml version="1.0" encoding="utf-8"?> 

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

<EditText 
    android:id="@+id/editText1" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" > 

    <requestFocus /> 

</EditText> 

Mój kod:

public class HelloworldActivity extends Activity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE); 

    } 
} 
+0

Myślę, że "android: windowSoftInputMode" jest atrybutem elementu/tagu "activity". – Deucalion

+0

Masz rację - zmieniłem to. Wciąż nie ma klawiatury. –

+0

co zrobiłeś? czy w końcu został rozwiązany? – Kenji

Odpowiedz

2

Czy używasz domyślnej klawiatury Androida? Jeśli tak, spróbuj na innym urządzeniu. Wiem, że ma pewne problemy.

+0

Masz rację. Po zainstalowaniu zewnętrznej klawiatury na moim urządzeniu, w jakiś sposób mój domyślny KB zniknął z ustawień urządzenia. najwyraźniej jest to znany problem, który wpłynął również na to. Użyłem innego urządzenia i jego pracy. Nadal nie wiem, dlaczego emulator nie pokazuje KB. –

1

Jak znalazłem here można wyświetlić klawiaturę, gdy aktywność rozpoczyna się wykonując następujące czynności:

EditText editText = (EditText) findViewById(R.id.editText1); 
    InputMethodManager mgr = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
    mgr.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT); 

zmieniłem swój kod przykładowy mieć swój identyfikator EditText, więc powinno zadziałać

0

Możesz f Orce najpierw skupić się na widoku EditText uruchamiając:

final EditText edit = (EditText) findViewById(R.id.editText1); 
edit.post(new Runnable() { 
    @Override 
    public void run() { 
     edit.requestFocus(); 
    } 
}); 

ta powinna otworzyć klawiaturę na początku działalności.

+0

Nie ma potrzeby tworzenia niepotrzebnego wątku. Po prostu zobacz moją odpowiedź na rozwiązanie. –

+0

post nie tworzy nowego wątku, dodaje funkcję do kolejki widoku, jest całkowicie skuteczny. Wciąż pracuję z moim rozwiązaniem, wydaje mi się bardziej elegancki. – marmor

+0

Tak, oczywiście. Działa również dobrze. Ciesz się kodowaniem. –

3

To prosta sprawa. Zrobiłem to i to działa jako twoje wymaganie.

  1. Nic nie rób z manifestem, pozostaw to tak, jak jest podczas tworzenia nowego projektu.

  2. Teraz zdefiniuj menedżer danych wejściowych.

    public static InputMethodManager imm; 
    imm = (InputMethodManager)this.getSystemService(Context.INPUT_METHOD_SERVICE); 
    
  3. Teraz tutaj jest moja pensja EditText EditText i jestem przedstawiający klawiaturę na początku tej działalności.

    salaryEditText.setHint("select Salary/Wage"); 
    
    salaryEditText.setFilters(new InputFilter[] {new DecimalDigitsInputFilter(2)}); // Ignore this line 
    
    if(!(imm==null)) 
    imm.toggleSoftInput(InputMethodManager.SHOW_FORCED,1); 
    

który pomoże Ci pokazać klawiaturze i rozpocząć działalność.

Aby zamknąć klawiaturę na mecie działalności patrz poniżej kodu:

biały ten kod podczas zakończyć działalność.

imm.hideSoftInputFromWindow(salaryEditText.getWindowToken(), 0); 

Mam nadzieję, że rozwiąże to problem. Jeśli nie, daj mi znać.

Ciesz się. :)

+0

Mam ten sam problem i to nie działa. – Kenji

+0

@kenji Proponuję zaakceptować zaakceptowaną odpowiedź, jeśli ta odpowiedź nie działa dla Ciebie. Dzięki. –