2014-06-27 2 views
0

J'ai une boîte de EditText où je veux contrôler le curseur et modifier le texte par programmecontrôle curseur et programmation du texte dans EditText

  • J'ai 12 clavier bouton fait à l'aide des boutons 12 dans un GridView. A chaque appui sur un bouton, j'ai un texte spécifique à insérer dans la zone EditText à l'emplacement du curseur. Pour cela j'ai besoin de la position du curseur pour que je puisse insérer mon texte personnalisé dans la vue EditText
  • J'ai deux boutons pour déplacer la position du curseur gauche/droite d'un caractère. Alternativement le curseur peut également être placé en touchant la vue EditText (comme EditText est censé se comporter)
  • Aussi je veux la position actuelle du curseur dans EditText chaque fois que la position de curseur change (je pense que je dois mettre en application une sorte d'interface mais je ne savoir comment)

Ce que j'ai essayé jusqu'à présent

  • je stocke les touches dans un ArrayList<String>
  • Je suis en train de la edittext.setText(String) chaque fois qu'une touche est pressée
  • peut obtenir le texte modifiable à travers getText() mais setText() accepte uniquement les chaînes.

Par conséquent, je suis confus. Que dois-je faire pour répondre à toutes mes exigences.
PS: Je suis un débutant Android, et je suis fait ma 2ème application (ce qui est une calculatrice scientifique si elle aide)
aussi si quelqu'un porte volontaire pour revoir mon code, je serai profondément obligé de lui

+0

'getText(). ToString()' – VenomVendor

+0

cela donnera juste la chaîne de EditText. Ne m'aidez pas beaucoup! – Archit

Répondre

0

Pour Définissez n'importe quel nombre dans EditText utilisez la classe Wrapper puis définissez-la sur EditText en utilisant toString().

Pour la position définie, vous pouvez utiliser editText.setSelection (position);

0

Je ne sais pas pourquoi vous avez besoin de la position du curseur de la textview mais jetez un oeil à cette question ici: Get Cursor Position in Android in Edit Text?

En fait, vous pouvez modifier le texte dans le textview sur le code en obtenant l'entrée ou si vous voulez vous peut implémenter l'interface TextWatcher de savoir ce que toutes les entrées du type d'utilisateur dans votre textview comme celui-ci:

private class CheckText implements TextWatcher { 
    @Override 
     public void afterTextChanged(Editable s) { 
        //triggers after the user changed the input on text 
     } 
     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, 
       int after) { 
         //triggers before the user changed the input on text 
     } 
     @Override 
     public void onTextChanged(CharSequence s, int start, int before, 
       int count) { 
        //triggers when the user changed the input on text 
     } 
    } 
0

Il est ainsi que je l'ai fait quelque chose de similaire

  1. Identificateur stocké de tous les boutons d'un tableau, comme illustré ci-dessous.

    int[] kbdButtons = { R.id.button1, R.id.button2, R.id.button3, 
         R.id.button4, R.id.button5, R.id.button6, R.id.button7, 
         R.id.button8, R.id.button9, R.id.button10, R.id.button11, 
         R.id.button12, R.id.button13, R.id.button14, R.id.button15} 
    

    2.Puis ajouté coutume Onclicklistner à tous les boutons dans le tableau kbdButtons

    for (int i = 0; i < kbdButtons.length; i++) { 
         Button buttonNum = (Button) dialoglayout 
           .findViewById(kbdButtons[i]); 
         buttonNum.setOnClickListener(hindiKbdBtnsClick); 
        } 
    
  2. et voici la déclaration de clicklistner personnalisée

    private OnClickListener hindiKbdBtnsClick = new OnClickListener() { 
        @Override 
        public void onClick(View v) { 
         int btnId = v.getId(); 
         if (isShift && btnId != R.id.kbdKeyLeftShift 
           && btnId != R.id.kbdKeyRightShift) { 
          sNotPressedView.setVisibility(View.VISIBLE); 
          sPressedView.setVisibility(View.GONE); 
          isShift = false; 
         } 
         if (btnId == R.id.kbdKeyLeftShift || btnId == R.id.kbdKeyRightShift) { 
          if (!isShift) { 
           sNotPressedView.setVisibility(View.GONE); 
           sPressedView.setVisibility(View.VISIBLE); 
           isShift = true; 
          } else { 
           sNotPressedView.setVisibility(View.VISIBLE); 
           sPressedView.setVisibility(View.GONE); 
           isShift = false; 
          } 
    
         } else if (btnId == R.id.kbdKeySpace || btnId == R.id.kbdKeyEnter) { 
          hkEditText.append(" "); 
         } else if (btnId == R.id.kbdKeyBackSpace) { 
          String txt_curr_val = hkEditText.getText().toString(); 
          if (txt_curr_val.length() != 0) 
           txt_curr_val = txt_curr_val.substring(0, 
             txt_curr_val.length() - 1); 
          hkEditText.setText(txt_curr_val); 
          hkEditText.setSelection(txt_curr_val.length()); 
         }else if (btnId == R.id.kbdKeyHide) { 
          mDialog.hide(); 
         }else { 
          Button b = (Button) v; 
          String btnText = b.getText().toString(); 
          hkEditText.append(btnText); 
         } 
    
        } 
    }; 
    

Explication - hkEditText est ma vue editText c'est-à-dire

EditText hkEditText = (EditText)FindViewById(R.id.myEdittextId); 

-voir je viens d'ajouter le texte écrit sur le bouton qui est pressé à ce moment-là. -vous pouvez également voir la fonctionnalité de certains boutons spéciaux comme espace, décalage et entrer

Questions connexes