2011-06-08 3 views
4

Je suis un développeur android and iphone. Je suis un débutant bien que travaillant sur ce projet énorme. J'essaie d'implémenter les propriétés leftView, leftviewmode, rightview, rightviewmode du champ de texte dans iphone dans android.mettre en œuvre des propriétés uitextfield dans android

Je pensais qu'avec les méthodes leftview et rightview, la méthode setCompoundDrawables() pouvait relever le défi. Cependant, je suis perplexe quant à la façon de mettre en œuvre les différents modes; "Jamais", "toujours" etc.

Suis-je sur la bonne voie? Quelqu'un pourrait-il m'aider?

Merci

Répondre

6

Ce code vous donnera un champ Android EditText qui fonctionne exactement comme un iPhone UITextField avec des options pour clearbuttonmode, leftview, rightview, leftviewmode, rightviewmode, UITextFieldViewModeNever, UITextFieldViewModeWhileEditing, UITextFieldViewModeUnlessEditing, UITextFieldViewModeAlways

String value = "";//any text you are pre-filling in the EditText 
    final String viewMode = "editing";//never | editing | unlessEditing | always 
    final String viewSide = "right"; //left | right 
    final EditText et = new EditText(this); 
    et.setText(value); 
    //your leftview, rightview or clearbuttonmode image. for clearbuttonmode this one from standard android images looks pretty good actually 
    final Drawable x = getResources().getDrawable(R.drawable.presence_offline); 
    x.setBounds(0, 0, x.getIntrinsicWidth(), x.getIntrinsicHeight()); 
    Drawable x2 = viewMode.equals("never")?null:viewMode.equals("always")?x:viewMode.equals("editing")?(value.equals("") ? null : x):viewMode.equals("unlessEditing")?(value.equals("") ? x : null):null; 
    et.setCompoundDrawables(viewSide.equals("left")?x2:null, null, viewSide.equals("right")?x2:null, null); 
    et.setOnTouchListener(new OnTouchListener() { 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      if (et.getCompoundDrawables()[viewSide.equals("left")?0:2] == null) { 
       return false; 
      } 
      if (event.getAction() != MotionEvent.ACTION_UP) { 
       return false; 
      } 
      //x pressed 
      if ((viewSide.equals("left")&&event.getX() < et.getPaddingLeft() + x.getIntrinsicWidth()) 
        ||(viewSide.equals("right")&&event.getX() > et.getWidth() - et.getPaddingRight() - x.getIntrinsicWidth())) { 
       Drawable x3 = viewMode.equals("never")?null:viewMode.equals("always")?x:viewMode.equals("editing")?null:viewMode.equals("unlessEditing")?x:null; 
       et.setText(""); 
       et.setCompoundDrawables(viewSide.equals("left")?x3:null, null, viewSide.equals("right")?x3:null, null); 
      }   
      return false; 
     } 
    }); 
    et.addTextChangedListener(new TextWatcher() { 
     @Override 
     public void onTextChanged(CharSequence s, int start, int before, int count) { 
      Drawable x4 = viewMode.equals("never")?null:viewMode.equals("always")?x:viewMode.equals("editing")?(et.getText().toString().equals("") ? null : x):viewMode.equals("unlessEditing")?(et.getText().toString().equals("") ? x : null):null; 
      et.setCompoundDrawables(viewSide.equals("left")?x4:null, null, viewSide.equals("right")?x4:null, null); 
     } 

     @Override 
     public void afterTextChanged(Editable arg0) { 
     } 

     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, int after) { 
     } 
    }); 
+0

Cela fonctionne comme un charme, merci Harris !! – user788511

Questions connexes