2012-07-26 7 views
5

estoy usando TextWatcher validar mi entrada y quiero que mi imagen pista roja se pueda hacer clic para que pueda dar la respuesta visual del usuario, como se muestra en la siguiente imagen. Lo que tengo hasta ahora es el texto de edición con la imagen de sugerencia roja que aparece cuando ingreso datos inválidos. Ahora quiero saber cómo hacer clic en esta pista roja y hacer que aparezca una sugerencia emergente como se muestra.con enlace estirable compuesto en EditarTexto que aparece una vista en tecleo

EditText hint

Este es el código que tengo hasta ahora,

public class MainActivity extends Activity implements TextWatcher{ 

    EditText username,email = null; 
    boolean flag=false; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main);  

     username=(EditText) findViewById(R.id.usernametxt); 
     email=(EditText) findViewById(R.id.emailtxt); 

     username.addTextChangedListener(this); 

     username.setOnTouchListener(new View.OnTouchListener(){ 
     public boolean onTouch(View view, MotionEvent motionEvent) { 
      // your code here... 
      if(flag) 
      { 
       email.setText("Error. . ."); 
      } 
      getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);     
      return false; 
      } 
     }); 

     Button loginbtn = (Button) findViewById(R.id.login); 
     loginbtn.setOnClickListener(new Button.OnClickListener() { 

      public void onClick(View v) { 
       // TODO Auto-generated method stub 

       //Check Validations 
       if(username.getText().toString().equalsIgnoreCase("")) 
       { 
        username.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.alert, 0); 
        flag=true; 
       } 
      } 
     }); 

     Button clearbtn = (Button) findViewById(R.id.clear); 
     clearbtn.setOnClickListener(new Button.OnClickListener() { 

      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       username.setText(""); 
       email.setText("");  
      } 
     }); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.activity_main, menu); 
     return true; 
    } 

    public void afterTextChanged(Editable arg0) { 
     // TODO Auto-generated method stub 

    } 

    public void beforeTextChanged(CharSequence s, int start, int count, 
      int after) { 
     // TODO Auto-generated method stub 

    } 

    public void onTextChanged(CharSequence s, int start, int before, int count) { 
     // TODO Auto-generated method stub  
     username.setCompoundDrawablesWithIntrinsicBounds(0, 0, 0, 0); 
     flag=false; 
     email.setText(""); 
    } 
} 
+1

¿cuál es el problema? – Akram

+0

@Akki La imagen publicado es lo que me gustaría lograr. Ahora tengo la imagen roja solo cuando el usuario ingresa datos no válidos. Quiero hacer que la ventana emergente que se muestra en la imagen aparezca cuando el usuario haga clic en la pista roja de la imagen. –

+0

Todavía estoy bastante seguro de haber entendido el problema. –

Respuesta

5

Tienes que hacer una costumbre EditText para conseguir la primera función.

Solved here

La vista emergente al hacer clic en el dibujable se puede hacer con un PopupWindow

Solved here.

+0

popupWindow es exactamente lo que necesitaba. Gracias. –

3

Es muy simple si se utiliza la imagen pista roja como un estirable compuesto a la derecha de su EditText usernametxt. Lo siguiente hará el truco.

EditText username = (EditText) findViewById(R.id.usernametxt); 
username.setOnTouchListener(new OnTouchListener() { 
    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
     if(event.getAction() == MotionEvent.ACTION_UP) { 
      if(event.getRawX() >= username.getRight() - username.getTotalPaddingRight()) { 
       // your action for drawable click event 

      return true; 
      } 
     } 
     return true; 
    } 
}); 

Si desea para el cambio dibujable dejado la sentencia if para:

if(event.getRawX() <= username.getTotalPaddingLeft()) 

Del mismo modo, puede hacerlo para todos los dibujables compuestos.

username.getTotalPaddingTop() 
username.getTotalPaddingBottom() 

Esta llamada a método devuelve todo el relleno de ese lado, incluidos los elementos extraíbles. Se puede utilizar esta incluso para TextView, etc. Botón

Haga clic here de referencia desde el sitio de desarrolladores de Android.

Cuestiones relacionadas