9

我正在实现一个功能,当提示浮动时将textInputlayout提示文本的大小写更改为大写,反之亦然。

为此,我OnFocusChangeListener在其 child 上使用textInputEditText。为了便于实施,我正在实施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

这很明显,因为它返回Framelayout了不能被投射的textInputLayout

如果我使用

TextInputLayout textInputLayout = (TextInputLayout) findViewById(v.getId()).getRootView();

它再次抛出一个致命错误,因为getRootView()返回DecorView不能被强制转换textInputLayout

我的问题是如何textInputLayout从孩子那里得到父母textInputEditText

请指导。

4

3 回答 3

14

我用下面的代码行解决了这个问题:

TextInputLayout textInputLayout = (TextInputLayout) findViewById(v.getId()).getParent().getParent();

textInputlayout根据需要返回。

于 2017-07-03T12:07:08.177 回答
3

而不是使用TextInputLayout textInputLayout = (TextInputLayout) findViewById(v.getId()).getParent();视图实例,TextInputEditText et = (TextInputEditText) v;然后 TextInputLayout lay = (TextInputLayout)et.getParent().getParent();

于 2021-03-03T13:14:38.477 回答
0

您可以像这样在 TextInputLayout 中添加 id:

<android.support.design.widget.TextInputLayout
    android:id="@+id/nameLayout"
    style="@style/LightInputLayoutNoBox"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:hint="@string/create_contact_account_data_name"
    app:hintTextAppearance="@style/TextSmall.Bold">

    <android.support.design.widget.TextInputEditText
        android:id="@+id/name"
        style="@style/LightInputFieldNoBox"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:drawableEnd="@drawable/ic_book_contacts" />

</android.support.design.widget.TextInputLayout>

并在活动中调用 findViewById 到 TextInputLayout

于 2017-07-03T10:51:50.910 回答