2017-08-09 7 views
0

InputType textPasswordのTextInputLayout内にパスワードの表示切り替えボタンがあります。Android。 TextInputLayout。パスワードの可視性イベントリスナーを切り替えますか?

トグルイベントをキャッチすることは何とかできますか?

私はトグルボタンのビューの種類を見つけるために、TextInputLayoutのソースコードを見て、この

+1

本当にありがとうございます。とにかく、すぐに利用できるものはありません。その 'View'には、パッケージプライベートのトグルメソッドを呼び出す匿名の' OnClickListener'が設定されています。私はそれを偽造するいくつかの方法を考えることができます。 'OnClickListListener'を妨害しないように設定できるので、' View'への参照を取得し、その上に 'OnTouchListener'を設定するのが最も簡単です。 –

+1

'mPasswordToggleView'にアクセスする方法を見つけることができれば、解決策を見つけることができます。 –

+0

@ K.Sopheak私は、おそらく正式な解決策があると思っていました:)そしてそうです、今私が試している方法です。 – Tima

答えて

1

のための任意のパブリックメソッドを見つけることができませんでした。そのCheckableImageButton他のすべては簡単です。 TextInputLayoutビューの子を再帰的に反復するビューを見つけ出す必要があります。そして、コメントに@MikeMとしてsetOnTouchListenerを指定してください。

View togglePasswordButton = findTogglePasswordButton(mTextInputLayoutView); 
if (togglePasswordButton != null) { 
    togglePasswordButton.setOnTouchListener(new View.OnTouchListener() { 
     @Override 
     public boolean onTouch(View view, MotionEvent motionEvent) { 
      // implementation 
      return false; 
     } 
    }); 
} 

private View findTogglePasswordButton(ViewGroup viewGroup) { 
    int childCount = viewGroup.getChildCount(); 
    for (int ind = 0; ind < childCount; ind++) { 
     View child = viewGroup.getChildAt(ind); 
     if (child instanceof ViewGroup) { 
      View togglePasswordButton = findTogglePasswordButton((ViewGroup) child); 
      if (togglePasswordButton != null) { 
       return togglePasswordButton; 
      } 
     } else if (child instanceof CheckableImageButton) { 
      return child; 
     } 
    } 
    return null; 
} 

findTogglePasswordButton

private View findTogglePasswordButton() { 
    return findViewById(R.id.text_input_password_toggle); 
} 

@MikeMの代替implmentation。 IDありがとうございます

+1

'CheckableImageButton'にはIDを持っています。名前は 'text_input_password_toggle'で、' Resources#getIdentifier() 'メソッドで' int'値を取得できます。ちょうどFYI。 –

+0

@MikeM。知っておいてよかった。彼らがidを変えたらどうなるか考えてみてください! – Tima

+0

どちらの場合でも、アプリ内にパッケージされたリソースであり、サポートライブラリのバージョンを管理することはありません。つまり、あなたがコンパイルするライブラリのバージョンの正しいIDを持っている限り、あなたはうまくいきます。デバイス間で異なるシステムリソースに依存することはありません。 –

関連する問題