我正在实现一个功能,当提示浮动时,将textInputlayout提示文本的大小写更改为大写,反之亦然.
为此,我在其子textInputEditText上使用OnFocusChangeListener.为了便于实现,我在我的活动上实现View.OnFocusChangeListener,如:
public class LoginActivity extends BaseActivity implements View.OnFocusChangeListener
并覆盖活动中的方法,如:
@Override
public void onFocusChange(View v, boolean hasFocus) {
if(findViewById(v.getId()) instanceof TextInputEditText){
TextInputLayout textInputLayout = (TextInputLayout) findViewById(v.getId()).getParent();
if(hasFocus){
textInputLayout.setHint(textInputLayout.getHint().toString().toUpperCase());
}else{
textInputLayout.setHint(Utility.modifiedLowerCase(textInputLayout.getHint().toString()));
}
}
}
在上面的方法中,我试图使用该行获取父textInputLayout的视图
TextInputLayout textInputLayout = (TextInputLayout) findViewById(v.getId()).getParent();
上面的代码行引发致命错误
java.lang.ClassCastException: android.widget.FrameLayout cannot be
cast to android.support.design.widget.TextInputLayout
并且它非常明显,因为它返回的Framelayout无法在textInputLayout中生成
如果我使用
TextInputLayout textInputLayout = (TextInputLayout) findViewById(v.getId()).getRootView();
它再次抛出致命错误,因为getRootView()返回无法在textInputLayout中生成的DecorView
我的问题是如何从子textInputEditText获取父textInputLayout?
请指导.
解决方法:
我用下面的代码行解决了这个问题:
TextInputLayout textInputLayout = (TextInputLayout) findViewById(v.getId()).getParent().getParent();
它根据需要返回textInputlayout.