1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

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

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von phiLue, 25.11.2011.

  1. phiLue, 25.11.2011 #1
    phiLue

    phiLue Threadstarter Neuer Benutzer

    Beiträge:
    6
    Erhaltene Danke:
    0
    Registriert seit:
    22.11.2011
    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. =/
     
  2. MichaelS, 25.11.2011 #2
    MichaelS

    MichaelS Fortgeschrittenes Mitglied

    Beiträge:
    370
    Erhaltene Danke:
    51
    Registriert seit:
    14.08.2009
    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
     
  3. phiLue, 25.11.2011 #3
    phiLue

    phiLue Threadstarter Neuer Benutzer

    Beiträge:
    6
    Erhaltene Danke:
    0
    Registriert seit:
    22.11.2011
    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.
     
  4. MichaelS, 25.11.2011 #4
    MichaelS

    MichaelS Fortgeschrittenes Mitglied

    Beiträge:
    370
    Erhaltene Danke:
    51
    Registriert seit:
    14.08.2009
    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
     
  5. phiLue, 25.11.2011 #5
    phiLue

    phiLue Threadstarter Neuer Benutzer

    Beiträge:
    6
    Erhaltene Danke:
    0
    Registriert seit:
    22.11.2011
    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. :)
     
  6. mradlmaier, 25.11.2011 #6
    mradlmaier

    mradlmaier Gewerbliches Mitglied

    Beiträge:
    158
    Erhaltene Danke:
    17
    Registriert seit:
    28.10.2011
    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.....
     

Diese Seite empfehlen