Android 可单击的复合绘图可编辑文本,单击后弹出视图

Android 可单击的复合绘图可编辑文本,单击后弹出视图,android,android-edittext,textwatcher,Android,Android Edittext,Textwatcher,我正在使用TextWatcher验证我的输入,我希望我的红色提示图像是可点击的,这样我就可以给用户视觉反馈,如下图所示。到目前为止,我所拥有的是当我输入无效数据时出现的带有红色提示图像的编辑文本。我现在想知道如何使这个红色提示可点击,并使弹出提示显示如图所示 这是我目前掌握的密码 public class MainActivity extends Activity implements TextWatcher{ EditText username,email = null;

我正在使用TextWatcher验证我的输入,我希望我的红色提示图像是可点击的,这样我就可以给用户视觉反馈,如下图所示。到目前为止,我所拥有的是当我输入无效数据时出现的带有红色提示图像的编辑文本。我现在想知道如何使这个红色提示可点击,并使弹出提示显示如图所示

这是我目前掌握的密码

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

您必须自定义
EditText
,才能获得第一个功能

单击可绘图文件时的弹出视图可以通过
PopupWindow


如果将红色提示图像用作可在EditText usernametxt右侧绘制的复合图形,则非常简单。 下面就可以了

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;
    }
});
如果您想要左可绘制,请将If语句更改为:

if(event.getRawX() <= username.getTotalPaddingLeft())
此方法调用返回该侧的所有填充,包括任何可提取项。您甚至可以将其用于文本视图、按钮等


点击查看android开发者网站。

@Akki发布的图片正是我想要实现的目标。我现在只有在用户输入无效数据时才有红色图像。我想在用户单击红色图像提示时显示图像中显示的弹出窗口。我现在仍然很确定我理解了这个问题。我使用
PopupWindow
@MichalK实现了一个类似的功能。我如何使编辑文本中的红色提示图像可单击,以便我可以使用PopupWindow?和可以附加的onClickListener对于任何
视图
,包括您的
图像视图
:Popupwindow正是我所需要的。非常感谢。
username.getTotalPaddingTop()
username.getTotalPaddingBottom()