我正在实现一个功能,将 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 无法转换为 android.support.design.widget.TextInputLayout
很明显,它返回了一个不能转换为 TextInputLayout
的 FrameLayout
。
而如果我使用
TextInputLayout textInputLayout = (TextInputLayout) findViewById(v.getId()).getRootView();
由于getRootView()
返回不可转换为textInputLayout
的DecorView
,因此它再次引发致命错误。
我的问题是如何从子项textInputEditText
获取父级textInputLayout
?
请指导。
textinputlayout
,而不适用于其他的。我希望它能够适用于布局中的每个textinputlayout
。 - Rahul Sharma