2012-07-26 6 views
5

Ich benutze TextWatcher, um meine Eingabe zu validieren und ich möchte mein rotes Hinweisbild anklickbar sein, damit ich dem Benutzer visuelle Rückmeldung geben kann, wie in der Abbildung unten gezeigt. Was ich bis jetzt habe, ist der Bearbeitungstext mit dem roten Hinweisbild, wenn ich ungültige Daten eintrage. Ich möchte nun wissen, wie man diesen roten Hinweis klickbar macht und einen Pop-up-Hinweis wie gezeigt erscheinen lässt.Klickbare Verbindung in EditText, die eine Ansicht auf Klick öffnet

EditText hint

Dies ist der Code, den ich bisher habe,

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

Was ist das Problem? – Akram

+0

@Akki Das Bild geschrieben ist, was ich erreichen möchte. Ich habe jetzt das rote Bild nur, wenn der Benutzer ungültige Daten eingibt. Ich möchte, dass das im Bild angezeigte Pop-up angezeigt wird, wenn der Benutzer auf den roten Bildhinweis klickt. –

+0

Ich bin mir immer noch ziemlich sicher, dass ich das Problem verstehe. –

Antwort

5

Sie haben eine benutzerdefinierte machen EditText das erste Merkmal zu erhalten.

Solved here

Das Popup-Ansicht, welche die ziehbar auf klicken, können mit einem PopupWindow

Solved here.

+0

Popupwindow ist genau das, was ich brauchte. Vielen Dank. –

3

Es ist sehr einfach, wenn Sie auf der rechten Seite des den roten Hinweis Bild als Verbindung ziehbar verwenden getan werden EditText Benutzernametxt. Folgendes wird den Trick machen.

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; 
    } 
}); 

Wenn Sie links ziehbar ändern wollen die if-Anweisung:

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

In ähnlicher Weise können Sie es für alle Verbindung Drawables tun.

username.getTotalPaddingTop() 
username.getTotalPaddingBottom() 

Dieser Methodenaufruf gibt das gesamte Padding auf dieser Seite zurück, einschließlich aller Zeichen. Sie können dies sogar für TextView, Button usw. verwenden.

Klicken Sie auf here als Referenz von Android-Entwickler-Website.