1

textInputlayoutヒントのテキストを大文字に変更する機能を実装していますヒントが浮かんでいるときにヒントのテキストを大文字に変更します。子のtextInputEditTextから親のtexInputlayoutを取得

そのため、textInputEditTextOnFocusChangeListenerを使用しています。

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())); 
     } 
    } 
} 

それは簡単に私のような私の活動にView.OnFocusChangeListenerを実装しています実装するようにするにはラインを使用して、親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() returので、致命的なエラーがスローされますns DecorViewキャスト不可textInputLayout

私の質問は、親からtextInputLayoutを得る方法です。textInputEditText

ご案内しています。

+0

TextInputEditTextのようなxmlレイアウトでTextInputLayoutにIDを割り当てないのはなぜですか? –

+0

@DanielRL私はすでにxmlにidを割り当てていますが、オーバーライドされたメソッドのIDのharcodingは他のものではなく 'textinputlayout'のためだけに機能し、レイアウト内のすべての' textinputlayout' –

答えて

2

にTextInputLayoutにfindViewByIdを呼び出す:

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

それは、必要に応じてtextInputlayoutを返します。

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> 

と活動

+0

私はすでにxmlにidを割り当てていますが、オーバーライドされたメソッドのIDをharcodingすることは他のものではなく 'textinputlayout'のためだけに機能し、レイアウト内のすべての' textinputlayout'に対して機能します。 –

+0

アンドロイドのドキュメントでは、あなたはそれを行うことができないと言います:https://developer.android.com/reference/android/support/design/widget/TextInputLayout.html したがって、あなたはtextinputedittextでリスナーを配置し、findviewbyidを使用する必要があります。 –

+1

私の答えを確認してくださいダニエル。私はこの問題を解決しました。とにかく助けてくれてありがとう。 –

関連する問題