對於InputType textPassword,TextInputLayout中有一個密碼可見性切換按鈕。Android。 TextInputLayout。切換密碼可見性事件監聽器?
是否有可能捕捉切換事件?
我找不到這個
對於InputType textPassword,TextInputLayout中有一個密碼可見性切換按鈕。Android。 TextInputLayout。切換密碼可見性事件監聽器?
是否有可能捕捉切換事件?
我找不到這個
我看着TextInputLayout的源代碼,找到切換按鈕的視圖的類型的任何公共方法。它的CheckableImageButton。其他一切都很簡單。您需要查找迭代迭代TextInputLayout視圖的子節點的視圖。然後將setOnTouchListener設置爲@MikeM在評論中提示。
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
那個'CheckableImageButton'有一個ID,顯然,如果你寧願去那條路線。名字是'text_input_password_toggle',你可以通過'Resources#getIdentifier()'方法獲得int值。只是FYI。 –
@MikeM。很高興知道。想想如果他們改變了ID?! – Tima
這不太可能,但是,無論哪種方式,它都是打包在應用程序中的資源,並且您可以控制支持庫版本。也就是說,只要你有編譯的庫版本的正確標識,你就很好。它不依賴於設備之間可能不同的系統資源。 –
不是。好吧,無論如何,沒有什麼可用的。這個'View'上有一個匿名的'OnClickListener',它只是調用一個包 - 私有切換方法。我可以想到幾種方法來僞造它。最簡單的方法是獲取對該View的引用,並在其上設置一個「OnTouchListener」,因爲您可以設置它以避免干擾「OnClickListener」。 –
如果您可以找到訪問'mPasswordToggleView'的方法,您可以找到解決方案。 –
@ K.Sopheak我認爲,也許有這個:)的正式解決方案,是的,這就是我現在正在嘗試的方式 – Tima