SoftInput manuell aufrufen um ButtonText zu ändern.

  • Antworten:1
Philip M.
  • Forum-Beiträge: 90

24.11.2011, 11:47:34 via Website

Guten Morgen,

heute ist mir ein Problem aufgefallen, dass sich in meiner App auf Knopfdruck eigentlich die Tastatur öffnen soll, was sie aber nicht macht. Ich brauche sie um den Text in einem Button zu ändern und habe bisher folgenden Quellcode. Weiß einer was ich für einen Fehler mache? Denn wenn ich bei Google suche, find ich auch nur ähnliche Beispiele wobei es dort bei einigen funktioniert und bei anderen nicht.

//Edit: Weiteres Problem welches mir grade auffällt ist, das nur Zahlen angezeigt werden dürfen. Wenn ich eine EditText erstelle mit dem "InputType = numberDecimal" funktioniert das ja auch. Diese Tastatur müsste manuell aufgerufen werden.

1Button menge = view.getMengeButton();
2menge.setOnClickListener(new OnClickListener() {
3 @Override
4 public void onClick(View v) {
5 InputMethodManager m = (InputMethodManager) view.getSystemService(Context.INPUT_METHOD_SERVICE);
6 m.showSoftInput(menge, InputMethodManager.SHOW_IMPLICIT);
7 }
8});
9
10menge.setOnKeyListener(new OnKeyListener() {
11
12 @Override
13 public boolean onKey(View v, int keyCode, KeyEvent event) {
14 // TODO: Hier soll später der eingegebene Text abgefangen werden und eingetragen werden.
15 return false;
16 }
17});

— geändert am 24.11.2011, 12:56:05

Antworten
Philip M.
  • Forum-Beiträge: 90

24.11.2011, 16:58:40 via Website

Okay, habe nun ein Teilproblem gelöst. Ich kann die richtige Tastatur einblenden und auch Teilweise anfragen wegen des Inputs vornehmen.
Hier der Quellcode, ich hoffe ihr könnt damit was anfangen.


1// Die nächsten beiden Zeilen sind wichtig, da er das Keyboard sonst nicht anzeigt
2view.getAnzahlButton().setFocusable(true);
3view.getAnzahlButton().setFocusableInTouchMode(true);
4view.getAnzahlButton().setInputType(InputType.TYPE_NUMBER_FLAG_DECIMAL);
5
6view.getAnzahlButton().setOnClickListener(new OnClickListener() {
7 @Override
8 public void onClick(View v) {
9 InputMethodManager m = (InputMethodManager) v.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
10 m.showSoftInput(view.getAnzahlButton(), 0);
11 }
12});
13
14view.getAnzahlButton().setKeyListener(new DigitsKeyListener() {
15 @Override
16 public boolean onKeyDown(View v, Editable content, int keyCode, KeyEvent event) {
17 if(keyCode == KeyEvent.KEYCODE_DEL && view.getAnzahlButton().getText().length() > 0) {
18 view.getAnzahlButton().setText(view.getAnzahlButton().getText().subSequence(0, view.getAnzahlButton().getText().length() - 1));
19 return false;
20 }
21 return super.onKeyDown(v, content, keyCode, event);
22 }
23});
24
25view.getAnzahlButton().setOnKeyListener(new OnKeyListener() {
26 @Override
27 public boolean onKey(View v, int keyCode, KeyEvent event) {
28 if (keyCode == KeyEvent.KEYCODE_ENTER) {
29 InputMethodManager m = (InputMethodManager) v.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
30 m.hideSoftInputFromWindow(view.getAnzahlButton().getWindowToken(), 0);
31 if(view.getAnzahlButton().getText().length() <= 0 ||
32 (view.getAnzahlButton().getText().length() > 0 &&
33 Integer.valueOf(view.getAnzahlButton().getText().toString()) <= 0)) {
34 view.getAnzahlButton().setText("1");
35 }
36 }
37 return false;
38 }
39});

1) Nun habe ich noch das Problem, das aufgrund von Plausibilitätsprüfungen in meiner App, müsste ich auf das Schließen des Keyboards reagieren. Ich schließe es manuell auf Klick des Ok Buttons und kann so auch reagieren, aber wenn ich es durch den Hardware-Button "Zurück" schließe kann ich nicht reagieren. Ich habe auch probiert die Methode "onBackPressed" zu überschreiben, allerdings reagiert diese erst, wenn ich auf der Activity auf "Back" drücke, da diese Methode ja auch auf der Activity ist und nicht wenn das Keyboard hervorgehoben ist.

2) Ein anderes Problem ist noch, das mein Layout beim aufrufen der Tastatur nach oben verschoben wird, und das obwohl ich in der Manifest die Activity auf android:windowSoftInputMode="stateHidden|adjustPan" habe. Vielleicht kennt ja auch hierzu jemand eine Lösung.


Würde mich freuen wenn ihr mir nun helfen könnte. Es sind ja auch nur noch die letzten paar Probleme zu bekämpfen. :-)

//Edit: Zum Verständnis... vielleicht kann mir auch noch jemand den Unterschied zwischen dem OnKeyListener und dem KeyListener erklären.

— geändert am 24.11.2011, 17:00:38

Antworten