EditText 中可点击的复合可绘制对象,点击时会弹出一个视图
Posted
技术标签:
【中文标题】EditText 中可点击的复合可绘制对象,点击时会弹出一个视图【英文标题】:Clickable compound drawable in EditText that pops a view on click 【发布时间】:2012-07-24 19:57:40 【问题描述】:我正在使用 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("");
【问题讨论】:
@Akki 发布的图片是我想要实现的。我现在只有当用户输入无效数据时才有红色图像。我想让用户单击红色图像提示时出现图像中显示的弹出窗口。 我现在仍然很确定我理解了这个问题。 我用PopupWindow
developer.android.com/reference/android/widget/PopupWindow.html实现了一个类似的功能
@MichalK 如何使 editText 中的红色提示图像可点击,以便我可以使用 popupwindow?
使用 onClickListener 可以附加到任何View
,包括您的ImageView
:developer.android.com/reference/android/view/…
【参考方案1】:
您必须自定义EditText
才能获得第一个功能。
Solved here
点击drawable的弹出视图可以通过PopupWindow
来完成
Solved here.
【讨论】:
Popupwindow 正是我所需要的。谢谢。【参考方案2】:如果您将红色提示图像用作 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())
同样,您可以对所有复合可绘制对象执行此操作。
username.getTotalPaddingTop()
username.getTotalPaddingBottom()
此方法调用返回该侧的所有填充,包括任何可绘制对象。您甚至可以将它用于 TextView、Button 等。
点击here来自android开发者网站的参考。
【讨论】:
以上是关于EditText 中可点击的复合可绘制对象,点击时会弹出一个视图的主要内容,如果未能解决你的问题,请参考以下文章
Android Edittext Drawable 点击卡住焦点