2016-08-03 107 views
7

我試圖在輸入類型爲文本密碼的編輯文本中顯示用戶輸入的密碼。編輯文本密碼切換Android

我實現gesturelistener在切換圖標像這個 -

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

我不知道什麼是錯的,任何幫助將不勝感激。

+0

我的祝酒詞都工作正常,但在編輯文本 –

回答

14

自支持庫v24.2.0。你可以achivie這很容易

您需要做的僅僅是:

  1. 設計庫一起添加到您的依賴條件

    dependencies { 
        compile "com.android.support:design:25.1.0" 
    } 
    
  2. 使用TextInputEditTextTextInputLayout

    <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> 
    

passwordToggleEnabled屬性將密碼切換顯示

  • 在你的根佈局不要忘記添加xmlns:app="http://schemas.android.com/apk/res-auto"

  • 您可以通過使用自定義密碼切換:

  • app:passwordToggleDrawable - 可繪製用作密碼輸入可見性切換圖標。
    app:passwordToggleTint - 用於密碼輸入可見性切換的圖標。
    app:passwordToggleTintMode - 用於應用背景色調的混合模式。

    更多詳細信息在TextInputLayout documentation

    enter image description here

    +0

    默認我想密碼不可見。我如何做到這一點 –

    1

    請嘗試以下方法。在這裏,我們正在設置一個複合繪圖,當點擊時將顯示或隱藏密碼:

    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

    請嘗試此代碼。

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

    我希望它能工作,謝謝。

    +0

    的文本沒有影響thanks.the代碼工作正常,但每次我點擊繪製編輯文本光標轉到第一位置 –

    +0

    嘗試這兩個開關例子..... etPassword.setSelection(etPassword.getText()。length());讓我知道,如果它不起作用。 – 2016-08-03 05:58:11

    +0

    我得到了答案,我不得不添加edittext.setSelection(Position)。在內部,採取行動和採取行動。 –