SoftInput Keyboard manuell hervorholen um Text im Button zu ändern.

P

phiLue

Neues Mitglied
0
Guten Morgen liebe Android-Community :)

Ich bin hier schon öfter ab und an mal am lesen, war bisher aber aktiv immer nur bei AndroidPit unterwegs. Da mir dort aber öfters nicht geholfen werden konnte und hier eine deutlich höhere User-Anzahl ist, wurde es Zeit sich hier auch aktiv zu betätigen. Soviel nun zu mir, und nun komm ich dann auch gleich mit einem Problem an.

Mein Problem war/ist, das ich das Keyboard manuell hervorholen musste, da ich es auf einen Button anwenden wollte und nicht auf einem EditText Element. Habe es im Großen und Ganzen auch geschafft, allerdings sind noch einige Probleme offen, welche ich nicht allein gelöst bekomme.
Ich poste euch einfach mal den Quellcode.

Die Variable "view" ist hier die Activity wo der Button drauf liegt.

Code:
        // Wichtig, da sonst die Tastatur nicht angezeigt wird
        view.getAnzahlButton().setFocusable(true);
        view.getAnzahlButton().setFocusableInTouchMode(true);
     
        view.getAnzahlButton().setInputType(InputType.TYPE_NUMBER_FLAG_DECIMAL);

        // Funktion damit bei Klick auf dem Button die Tastatur angezeigt wird
        view.getAnzahlButton().setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                InputMethodManager m = (InputMethodManager) v.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
                m.showSoftInput(view.getAnzahlButton(), 0);
            }
        });


        // Um einzelnde Zeichen auf dem Button zu löschen        
        view.getAnzahlButton().setKeyListener(new DigitsKeyListener() {
            @Override
            public boolean onKeyDown(View v, Editable content, int keyCode, KeyEvent event) {
                if(keyCode == KeyEvent.KEYCODE_DEL && view.getAnzahlButton().getText().length() > 0) {
                    view.getAnzahlButton().setText(view.getAnzahlButton().getText().subSequence(0, view.getAnzahlButton().getText().length() - 1));
                    return false;
                } 
                
                return super.onKeyDown(v, content, keyCode, event);
            }
        });
        

        // Um Tastatur bei Klick auf OK zu schließen und Plausibilitätsprüfung
        view.getAnzahlButton().setOnKeyListener(new OnKeyListener() {
            @Override
            public boolean onKey(View v, int keyCode, KeyEvent event) { 
                if (keyCode == KeyEvent.KEYCODE_ENTER) {
                    InputMethodManager m = (InputMethodManager) v.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
                    m.hideSoftInputFromWindow(view.getAnzahlButton().getWindowToken(), 0);
                    if(view.getAnzahlButton().getText().length() <= 0 || 
                            (view.getAnzahlButton().getText().length() > 0 && 
                             Integer.valueOf(view.getAnzahlButton().getText().toString()) <= 0)) {
                        view.getAnzahlButton().setText("1");
                    }
                }
                return false;
            }
        });
Meine letzten Probleme sind wie folgt.

1) Wenn ich die Tastatur schließe indem ich auf den Zurück-Button (Hardware-Button), greift keine der Listener so das ich meine Plausibilitätsprüfungen nicht setzen kann. Ich habe auch schon versucht die Methode "onBackPressed" der Activity zu überschreiben, allerdings greift diese auch erst, wenn ich auf "Back" drücke während die Activity Selectiert ist und die Tastatur schon weg ist. Gibt es hier eine Möglichkeit?

2) Wenn die Tastatur aufgerufen wird, verschiebt sich mein ganzes Layout und das obwohl ich in der Manifest bei der Activity "android:windowSoftInputMode="stateHidden|adjustPan"" angegeben habe, was bisher immer funktioniert hat. Hat hier einer eine Idee woran das liegen könnte?

So, das war nun genug Text, ich hoffe irgendwer ließt das ganze überhaupt und kann mir helfen. Ich glaube das Arbeiten mit dem Keyboard ist bisher das komplizierteste was ich bisher gemacht habe obwohl man glaubt es könne doch nicht so schwer sein. Da war das zusammen basteln der ganzen Custom Widgets echt angenehmer. Liegt aber wohl auch daran weil dieser Teil echt mies bis garnicht dokumentiert ist. =/
 
Abgesehen von deinen Problemen halte ich dein Vorhaben nicht für gut. Du verlierst dadurch recht viele Funktionen die man beim bearbeiten hat. Ich würde nie ein Text eines Buttons direkt verändern über die Tastatur!

Besser wäre ein Dialog wo ein Textfeld drin ist wo man auch den Text makieren kann, copy & paste funktioniert und man ohne Probleme sein Text eingeben kann.

Gruß
Michael
 
Das will ich auch garnicht bestreiten und ich gebe dir vollkommen recht. Ich würde es auch genauso machen wie du sagtest, allerdings wird mir das leider so vorgegeben weswegen ich hier nichts ändern darf. =/

Allerings handelt es sich hier auch nur um die Eingabe von max. 3 Zahlen wo das fehlen von Copy&Paste hoffentlich kein all zu großes defizit dastellt. Nichts desto trotz wäre der Dialog trotzdem die bessere Lösung.
 
Du musst deine Kunden auch ein wenig erziehen. Wenn man selber merkt, dass im Konzept Lücken oder nicht optimal überlegt wurde. Sollte man das mit dem Kunden besprechen. So ein Punkt halte ich auf jeden Fall für Besprechungswürdig :D
 
Hast du wahrscheinlich recht mit. :)
Ich habe es jetzt mit nem Dialog gelöst und muss sagen, dass es in der Tat um einiges komfortabler und angenehmer ist. Schon allein deswegen, weil man von anderen Apps auch gewohnt es, sowas über einen Dialog zu machen.

Danke nochmal für die Aufklärung. Vielleicht kann ja trotzdem jemand meine Codeschnippsel da oben gebrauchen da dieser Teil wirklich mies dokumentiert ist. :)
 
Vom Standpunkt der Usability ist das sicherlich weniger optimal. Benutzer erwarten dass sich Button wie Button verhalten, und Textfelder wie Textfelder. Das mag ja eine kreative Idee sein, aber den Durchchnittsbenutzer verwirrt das nur.....
 

Ähnliche Themen

A
  • AnimaAngelo85
Antworten
1
Aufrufe
313
swa00
swa00
MES
Antworten
10
Aufrufe
787
MES
MES
D
  • djsnoopy
Antworten
6
Aufrufe
598
djsnoopy
D
Zurück
Oben Unten