Deaktiviere die Tastatur auf EditText

Ich mache einen Taschenrechner. Also habe ich meine eigenen Buttons mit Zahlen und Funktionen gemacht. Der Ausdruck, der berechnet werden muss, befindet sich in einem EditText , denn ich möchte, dass Benutzer Zahlen oder Funktionen auch in der Mitte des Ausdrucks hinzufügen können, also mit dem EditText ich den cursor . Aber ich möchte die Keyboard deaktivieren, wenn Benutzer auf den EditText . Ich habe dieses Beispiel gefunden, dass es ok für Android 2.3 , aber mit ICS deaktivieren Sie die Keyboard und auch den Cursor.

 public class NoImeEditText extends EditText { public NoImeEditText(Context context, AttributeSet attrs) { super(context, attrs); } @Override public boolean onCheckIsTextEditor() { return false; } } 

Und dann benutze ich diese NoImeEditText in meiner XML Datei

  • Im Ordner "Build" wurde beim Öffnen eines APK kein "apk" Ordner erstellt
  • Löschen Anwendungs-Cache beim Ausstieg in Android
  • Thread Priorität - 'Unit Test'
  • Wie man zip auf Genymotion programmatisch blitzt
  • Ersetzen eines Strings in AndroidManifest.xml für ein Buildvariant funktioniert nicht für Gradle Android Plugin Version> 0.5.4
  • RingtonePreference not firing onSharedPreferenceChanged
  •  <com.my.package.NoImeEditText android:id="@+id/etMy" .... /> 

    Wie kann ich dieses EditText mit ICS kompatibel machen ??? Vielen Dank.

  • Fehler beim Zuweisen von Speicher: 8
  • SyncAdapter periodicsync () nicht auslösen
  • Cordova und setzt Android mit der Befehlszeile
  • Kann nicht Ordner auf externen Speicher auf Android erstellen
  • Fehler: (1, 0) Plugin mit id 'android' nicht gefunden
  • Wie kann ich wissen, wann ein edittext den Fokus verliert
  • 11 Solutions collect form web for “Deaktiviere die Tastatur auf EditText”

    Hier ist eine Website, die dir was du brauchst

    Als Zusammenfassung gibt es Links zu InputMethodManager und View von Android Developers. Es wird auf das getWindowToken innerhalb von View und hideSoftInputFromWindow() für InputMethodManager

    Eine bessere Antwort ist in der Link gegeben, hoffe das hilft.

    Hier ist ein Beispiel für das onTouch-Event:

     editText_input_field.setOnTouchListener(otl); private OnTouchListener otl = new OnTouchListener() { public boolean onTouch (View v, MotionEvent event) { return true; // the listener has consumed the event } }; 

    Hier ist ein weiteres Beispiel von der gleichen Website. Dies behauptet zu arbeiten, aber scheint wie eine schlechte Idee seit dein EditBox ist NULL es wird nicht mehr ein Editor:

     MyEditor.setOnTouchListener(new OnTouchListener(){ @Override public boolean onTouch(View v, MotionEvent event) { int inType = MyEditor.getInputType(); // backup the input type MyEditor.setInputType(InputType.TYPE_NULL); // disable soft input MyEditor.onTouchEvent(event); // call native handler MyEditor.setInputType(inType); // restore input type return true; // consume touch even } }); 

    Hoffe, das zeigt euch in die richtige Richtung

    Unter Code ist sowohl für API> = 11 und API <11. Cursor ist noch verfügbar.

     /** * Disable soft keyboard from appearing, use in conjunction with android:windowSoftInputMode="stateAlwaysHidden|adjustNothing" * @param editText */ public static void disableSoftInputFromAppearing(EditText editText) { if (Build.VERSION.SDK_INT >= 11) { editText.setRawInputType(InputType.TYPE_CLASS_TEXT); editText.setTextIsSelectable(true); } else { editText.setRawInputType(InputType.TYPE_NULL); editText.setFocusable(true); } } 

    Versuchen: android:editable="false" oder android:inputType="none"

    Sie können auch setShowSoftInputOnFocus (boolean) direkt auf API 21+ oder durch Reflexion auf API 14+ verwenden:

     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { editText.setShowSoftInputOnFocus(false); } else { try { final Method method = EditText.class.getMethod( "setShowSoftInputOnFocus" , new Class[]{boolean.class}); method.setAccessible(true); method.invoke(editText, false); } catch (Exception e) { // ignore } } 
     // only if you completely want to disable keyboard for // that particular edit text your_edit_text = (EditText) findViewById(R.id.editText_1); your_edit_text.setInputType(InputType.TYPE_NULL); 

    Einfach gesetzt:

      NoImeEditText.setInputType(0); 

    Oder im Konstruktor:

      public NoImeEditText(Context context, AttributeSet attrs) { super(context, attrs); setInputType(0); } 

    Ich fand diese Lösung, die für mich arbeitet. Es platziert auch den Cursor, wenn auf EditText an der richtigen Position geklickt wird.

     EditText editText = (EditText)findViewById(R.id.edit_mine); // set OnTouchListener to consume the touch event editText.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { v.onTouchEvent(event); // handle the event first InputMethodManager imm = (InputMethodManager)v.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); if (imm != null) { imm.hideSoftInputFromWindow(v.getWindowToken(), 0); // hide the soft keyboard } return true; } }); 

    Um Alex Kucherenko-Lösung hinzuzufügen: Das Problem, dass der Cursor nach dem Aufruf von setInputType(0) verschwindet, ist auf einen Framework-Bug auf ICS (und JB) zurückzuführen.

    Der Fehler ist hier dokumentiert: https://code.google.com/p/android/issues/detail?id=27609 .

    Um dies zu setRawInputType(InputType.TYPE_CLASS_TEXT) , rufen Sie setRawInputType(InputType.TYPE_CLASS_TEXT) direkt nach dem setInputType Aufruf auf.

    Um die Tastatur zu stoppen, OnTouchListener sie einfach OnTouchListener des EditText aus und gibst true zurück (das Touch-Event verschlingen):

     ed.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { return true; } }); 

    Die Gründe für den Cursor erscheinen auf GB-Geräten und nicht auf ICS + hatte mich reißen meine Haare für ein paar Stunden, so dass ich hoffe, das spart jemand Zeit.

    Sammeln Sie Lösungen von mehreren Plätzen hier auf StackOverflow, ich denke, das nächste fasst es zusammen:

    Wenn Sie nicht brauchen, dass die Tastatur irgendwo auf Ihrer Aktivität angezeigt wird, können Sie einfach die nächsten Flags verwenden, die für Dialoge verwendet werden (von hier aus ):

      getWindow().setFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM, WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM); 

    Wenn du es nicht nur für ein bestimmtes EditText wünschst, kannst du das benutzen (von hier aus ):

     public static boolean disableKeyboardForEditText(@NonNull EditText editText) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { editText.setShowSoftInputOnFocus(false); return true; } if (Build.VERSION.SDK_INT > Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1) try { final Method method = EditText.class.getMethod("setShowSoftInputOnFocus", new Class[]{boolean.class}); method.setAccessible(true); method.invoke(editText, false); return true; } catch (Exception ignored) { } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2) try { Method method = TextView.class.getMethod("setSoftInputShownOnFocus", boolean.class); method.setAccessible(true); method.invoke(editText, false); return true; } catch (Exception ignored) { } return false; } 

    Oder das (von hier genommen ):

      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) editText.setShowSoftInputOnFocus(false); else editText.setTextIsSelectable(true); 

    Deaktivieren Sie die Tastatur (API 11 bis aktuell)

    Dies ist die beste Antwort, die ich bisher gefunden habe, um die Tastatur zu deaktivieren (und ich habe viele davon gesehen).

     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { // API 21 editText.setShowSoftInputOnFocus(false); } else { // API 11-20 editText.setTextIsSelectable(true); } 

    Es besteht keine Notwendigkeit, Reflexion zu verwenden oder den InputType auf Null zu setzen.

    Aktiviere die Tastatur

    Hier ist, wie Sie die Tastatur bei Bedarf wieder aktivieren.

     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { // API 21 editText.setShowSoftInputOnFocus(true); } else { // API 11-20 editText.setTextIsSelectable(false); editText.setFocusable(true); editText.setFocusableInTouchMode(true); editText.setClickable(true); editText.setLongClickable(true); editText.setMovementMethod(ArrowKeyMovementMethod.getInstance()); editText.setText(editText.getText(), TextView.BufferType.SPANNABLE); } 

    Sehen Sie diese Q & A, warum die komplizierte Pre API 21 Version benötigt wird, um setTextIsSelectable(true) rückgängig zu machen:

    • So aktivieren Sie die Tastatur nach dem Deaktivieren mit setTextIsSelectable

    Diese Antwort muss gründlicher getestet werden.

    Ich habe die setShowSoftInputOnFocus auf höhere API-Geräte getestet, aber nach @ androiddeveloper's Kommentar unten, sehe ich, dass dies muss gründlicher getestet werden.

    Hier ist ein Cut-and-Paste-Code zu helfen, diese Antwort zu testen. Wenn Sie bestätigen können, dass es funktioniert oder funktioniert nicht für API 11 bis 20, bitte hinterlassen Sie einen Kommentar. Ich habe keine API 11-20 Geräte und mein Emulator hat Probleme.

    Activity_main.xml

     <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:orientation="vertical" android:background="@android:color/white"> <EditText android:id="@+id/editText" android:textColor="@android:color/black" android:layout_width="match_parent" android:layout_height="wrap_content"/> <Button android:text="enable keyboard" android:onClick="enableButtonClick" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <Button android:text="disable keyboard" android:onClick="disableButtonClick" android:layout_width="wrap_content" android:layout_height="wrap_content"/> </LinearLayout> 

    MainActivity.java

     public class MainActivity extends AppCompatActivity { EditText editText; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); editText = (EditText) findViewById(R.id.editText); } // when keyboard is hidden it should appear when editText is clicked public void enableButtonClick(View view) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { // API 21 editText.setShowSoftInputOnFocus(true); } else { // API 11-20 editText.setTextIsSelectable(false); editText.setFocusable(true); editText.setFocusableInTouchMode(true); editText.setClickable(true); editText.setLongClickable(true); editText.setMovementMethod(ArrowKeyMovementMethod.getInstance()); editText.setText(editText.getText(), TextView.BufferType.SPANNABLE); } } // when keyboard is hidden it shouldn't respond when editText is clicked public void disableButtonClick(View view) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { // API 21 editText.setShowSoftInputOnFocus(false); } else { // API 11-20 editText.setTextIsSelectable(true); } } } 

    Just Do einfach Ding für das..Make EditText aktivieren false.wenn immer Sie brauchen, um wieder zu machen, ist es möglich, programmgesteuert oder umgekehrt zu aktivieren.

      <EditText android:enabled="false" android:id="@+id/et_events_search" android:layout_width="match_parent" android:layout_height="wrap_content" android:ems="10" /> 
    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.