2016-08-03 18 views
7

Próbuję pokazać użytkownikowi wpisane hasło w tekście edycji, którego typem jest tekst Hasło.Edytuj tekst Hasło Przełączanie Androida

I wdrożone gesturelistener na ikonie przełączania jak to-

public boolean onTouch(View view, MotionEvent motionEvent) { 
     switch (view.getId()) 
     { 
      case R.id.ivPasswordToggle: 

       switch (motionEvent.getAction()) { 
        case MotionEvent.ACTION_DOWN: 
         Toast.makeText(getContext(),"show",Toast.LENGTH_SHORT).show(); 
         etPassword.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD); 
         break; 
        case MotionEvent.ACTION_UP: 
         etPassword.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD | InputType.TYPE_CLASS_TEXT); 
         Toast.makeText(getContext(),"hide",Toast.LENGTH_SHORT).show(); 
         break; 
       } 
       break; 
     } 
     return true; 
    } 

Nie wiem co jest nie tak, każda pomoc będzie mile widziane.

+0

moje grzanki działają bez zarzutu, ale nie ma wpływu na tekst Edytuj tekst –

Odpowiedz

14

Od biblioteki pomocy technicznej v24.2.0. można achivie to bardzo proste

Co trzeba zrobić, to po prostu:

  1. Dodaj Biblioteki projektu do dependecies

    dependencies { 
        compile "com.android.support:design:25.1.0" 
    } 
    
  2. Zastosowanie TextInputEditText w połączeniu z TextInputLayout

    <android.support.design.widget.TextInputLayout 
        android:id="@+id/etPasswordLayout" 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        app:passwordToggleEnabled="true"> 
    
        <android.support.design.widget.TextInputEditText 
         android:id="@+id/etPassword" 
         android:layout_width="match_parent" 
         android:layout_height="wrap_content" 
         android:hint="@string/password_hint" 
         android:inputType="textPassword"/> 
    </android.support.design.widget.TextInputLayout> 
    
atrybut 0

passwordToggleEnabled uczyni przełącznik hasło pojawiają

  1. w układzie korzenia nie zapomnij dodać xmlns:app="http://schemas.android.com/apk/res-auto"

  2. Można dostosować swoje hasło za pomocą przełącznika:

app:passwordToggleDrawable - Do użycia jako ikona przełączania widoczności hasła wejściowego.
app:passwordToggleTint - Ikona do użycia do przełączania widoczności hasła wejściowego.
app:passwordToggleTintMode - Tryb mieszania używany do nakładania odcienia tła.

Więcej szczegółów w TextInputLayout documentation.

enter image description here

+0

Domyślnie chcę, aby hasło nie było widoczne. Jak to osiągnąć –

1

Spróbuj następującej metody. W tym miejscu ustawiamy złożony ciąg znaków, który po kliknięciu wyświetli lub ukryje hasło:

private boolean passwordShown = false; 

private void addPasswordViewToggle() { 
     getPasswordEditText().setOnTouchListener(new View.OnTouchListener() { 
      @Override 
      public boolean onTouch(View v, MotionEvent event) { 
       final int DRAWABLE_RIGHT = 2; //index 

       if (event.getAction() == MotionEvent.ACTION_UP) { 
        if (event.getRawX() >= (getPasswordEditText().getRight() - getPasswordEditText().getCompoundDrawables()[DRAWABLE_RIGHT].getBounds().width())) { 
         if (passwordShown) { 
          passwordShown = false; 
          // 129 is obtained by bitwise ORing InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD 
          getPasswordEditText().setInputType(129); 

          // Need to call following as the font is changed to mono-space by default for password fields 
          getPasswordEditText().setTypeface(Typeface.SANS_SERIF); 
          getPasswordEditText().setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.locked_icon, 0); // This is lock icon 
         } else { 
          passwordShown = true; 
          getPasswordEditText().setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD); 

          getPasswordEditText().setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.unlocked_icon, 0); // Unlock icon 
         } 

         return true; 
        } 
       } 
       return false; 
      } 
     }); 
    } 
6

Proszę spróbować tego kodu.

public boolean onTouch(View view, MotionEvent motionEvent) { 
     switch (view.getId()) 
     { 
      case R.id.ivPasswordToggle: 

       switch (motionEvent.getAction()) { 
        case MotionEvent.ACTION_DOWN: 
         Toast.makeText(getContext(),"show",Toast.LENGTH_SHORT).show(); 
         etPassword.setTransformationMethod(HideReturnsTransformationMethod.getInstance()); 
         break; 
        case MotionEvent.ACTION_UP: 
         etPassword.setTransformationMethod(PasswordTransformationMethod.getInstance()); 
         Toast.makeText(getContext(),"hide",Toast.LENGTH_SHORT).show(); 
         break; 
       } 
       break; 
     } 
     return true; 
    } 

Mam nadzieję, że zadziała, dzięki.

+0

thanks.the kod działa poprawnie, ale za każdym razem po kliknięciu na odkształcalne kursor edycji tekstu idzie do pierwszej pozycji –

+0

spróbować zarówno w przełączniku cases ..... etPassword.setSelection (etPassword.getText(). length()); i daj mi znać, jeśli to nie zadziała. –

+0

otrzymałem odpowiedź, musiałem dodać edittext.setSelection (Position). wewnątrz obu, akcja w dół i akcja w górę. –