2010-04-06 28 views
160

Làm cách nào để đặt loại đầu vào cho EditText theo chương trình? Tôi đang cố gắng:Đặt inputType cho EditText?

mEdit.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD); 

nó dường như không có tác dụng.

Trả lời

182

Theo TextView docs, phiên bản có lập trình của android: password là setTransformationMethod(), không setInputType(). Vì vậy, một cái gì đó như:

mEdit.setTransformationMethod(PasswordTransformationMethod.getInstance()); 

nên thực hiện thủ thuật.

+3

Chỉ cần thêm vào điều này, bạn cần phải gọi setTransformationMethod * thay vì * của setInputType.Gọi setInputType sau khi setTransformationMethod làm cho EditText không ở chế độ mật khẩu một lần nữa. –

+9

câu trả lời này là sai cho câu hỏi được hỏi. Điều này chỉ biến đổi văn bản được nhập trong 'EditText' (thay thế các ký tự có dấu chấm mật khẩu). Điều này không có tác dụng gì trên những gì được phép được nhập vào trong 'EditText'. – slinden77

+3

setInputType cuối cùng gọi setTransformationMethod từ bên trong, vì vậy nếu bạn chuyển TYPE_TEXT_VARIATION_PASSWORD thành setInputType, nó sẽ làm điều này cho bạn. Vấn đề dường như ley trong gọi setSingleLine sau khi gọi setInputType mà sẽ gọi setTransformationMethod với null hoặc biến dòng đơn do đó thanh toán bù trừ biến mật khẩu. – sparkym3

-1

Hãy thử này thêm vào thẻ EditText/TextView trong cách bố trí của bạn

android:password="true" 

Chỉnh sửa: Tôi chỉ đọc lại bài viết của bạn, có lẽ bạn cần phải làm điều này sau khi xây dựng. Tôi không hiểu tại sao đoạn trích của bạn không hoạt động.

+0

Tôi không có tệp bố cục trong trường hợp này, các trường đang được tạo theo chương trình. – user246114

+0

Vâng nó đang được thực hiện sau khi xây dựng, không chắc chắn lý do tại sao nó không hoạt động! – user246114

+5

tùy chọn này hiện không còn được dùng nữa !! – swiftBoy

332

Để đặt kiểu đầu vào cho EditText theo chương trình, bạn phải chỉ định loại lớp đầu vào đó là văn bản.

editPass.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD); 
+2

Mẹo của bạn hoạt động hoàn hảo cho tôi! Tôi đã có một vấn đề tương tự với lập trình thiết lập các loại đầu vào để multiline. – MissPiplup

+5

+1 ed. Đây là câu trả lời đơn giản Điều này nên được đánh dấu là câu trả lời. –

+0

Mẹo tuyệt vời.Cảm ơn – Mariam

13

Để chỉ cho phép số:

password1.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_CLASS_NUMBER); 

Để chuyển đổi (ẩn) mật khẩu:

password1.setTransformationMethod(PasswordTransformationMethod.getInstance()); 
23

tôi đã giải quyết tất cả với

.setInputType(InputType.TYPE_CLASS_NUMBER); 

cho thấy rõ ràng dữ liệu và

.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_VARIATION_PASSWORD); 

cho thấy các dấu chấm (nếu dữ liệu là một con số, nó không phải là sự lựa chọn che lớp khác)

+0

Làm việc như quyến rũ. –

7
editText.setInputType(EditorInfo.TYPE_CLASS_NUMBER); 

// bạn có thể thay đổi TYPE _... theo yêu cầu của bạn.

0

Tôi biết Câu trả lời mong đợi là ở Java. Nhưng đây là tôi 2 cent lời khuyên luôn cố gắng để xử lý xem những thứ liên quan trong XML (ít nhất nội dung cơ bản) vì vậy tôi sẽ đề nghị thay vì sử dụng một thuộc tính xml chứ không phải xử lý trường hợp này sử dụng trong java

<EditText 
    android:inputType="textPassword"/> 
+2

Trong một số trường hợp, bạn có thể muốn chuyển đổi giữa các loại đầu vào khác nhau, ví dụ: ẩn/hiển thị mật khẩu được nhập vào một trường; đó là những gì cho phép tôi vào trang này – William

+1

nhưng cho rằng có một tùy chọn trong EditText cho phép bạn hiển thị/ẩn mật khẩu không cần phải làm điều đó một mình cũng cho nó một hình ảnh động đẹp cho điều đó. –

+0

cảm ơn thông tin, tôi đã thấy nó ở đây https://stackoverflow.com/a/41163578/3310235 – William

0

Điều này có thể giúp đỡ cho những người khác như tôi, những người muốn chuyển đổi giữa mật khẩu và chế độ văn bản tự do. Tôi đã thử sử dụng các phương thức nhập được gợi ý nhưng nó chỉ hoạt động theo một hướng. Tôi có thể đi từ mật khẩu đến văn bản nhưng sau đó tôi không thể hoàn nguyên. Đối với những người cố gắng xử lý hộp kiểm chuyển đổi (ví dụ: hiển thị Mật khẩu hiển thị), hãy sử dụng

 @Override 
     public void onClick(View v) 
     { 
      if(check.isChecked()) 
      { 
       edit.setTransformationMethod(HideReturnsTransformationMethod.getInstance()); 
       Log.i(TAG, "Show password"); 
      } 
      else 
      { 
       edit.setTransformationMethod(PasswordTransformationMethod.getInstance()); 
       Log.i(TAG, "Hide password"); 
      } 
     } 

Tôi phải ghi có this cho giải pháp. Ước gì tôi đã tìm thấy rằng một vài giờ trước!

Các vấn đề liên quan