有没有人可以帮我编写一个方法,让所有的EditTexts都出现在一个视图中?我想在这里实现htafoya发布的解决方案:How to hide soft keyboard on android after clicking outside EditText?
不幸的是,getFields()
方法丢失了,并且htafoya没有响应我们分享他的getFields()
方法的请求。
发布于 2011-11-04 19:36:48
这是我写的一个方法,用来递归地检查ViewGroup的所有EditText子代,对于我必须做的长注册表单来说很方便,而且可能更易于维护。
private EditText traverseEditTexts(ViewGroup v)
{
EditText invalid = null;
for (int i = 0; i < v.getChildCount(); i++)
{
Object child = v.getChildAt(i);
if (child instanceof EditText)
{
EditText e = (EditText)child;
if(e.getText().length() == 0) // Whatever logic here to determine if valid.
{
return e; // Stops at first invalid one. But you could add this to a list.
}
}
else if(child instanceof ViewGroup)
{
invalid = traverseEditTexts((ViewGroup)child); // Recursive call.
if(invalid != null)
{
break;
}
}
}
return invalid;
}
private boolean validateFields()
{
EditText emptyText = traverseEditTexts(mainLayout);
if(emptyText != null)
{
Toast.makeText(this, "This field cannot be empty.", Toast.LENGTH_SHORT).show();
emptyText.requestFocus(); // Scrolls view to this field.
}
return emptyText == null;
}
发布于 2011-10-17 15:23:08
可以通过调用View#getFocusables
来实现这一点,它将返回一个视图中所有可聚焦视图的数组列表。
然后,您可以使用(instanceof
)检查它们是否为EditText
s,或者对所有它们执行操作。
发布于 2016-05-08 08:08:51
这个方法递归地遍历所有ViewGroups并收集它们的TextViews。我用它来给所有的TextViews分配一个新的颜色(即使是那些嵌入到预定义的小部件中的小部件,比如Switch等,这些小部件都使用了TextViews)
private HashSet<TextView> getTextViews(ViewGroup root){
HashSet<TextView> views=new HashSet<>();
for(int i=0;i<root.getChildCount();i++){
View v=root.getChildAt(i);
if(v instanceof TextView){
views.add((TextView)v);
}else if(v instanceof ViewGroup){
views.addAll(getTextViews((ViewGroup)v));
}
}
return views;
}
https://stackoverflow.com/questions/7790487
复制相似问题