2012-07-12 35 views
5

Cố gắng tạo một InputMethod Android minh bạch - tức là nội dung cơ bản hiển thị qua bàn phím mà tôi đang phát triển.InputMethod trong suốt cho Android

Tôi đã có thể tạo Chế độ xem mà tôi chuyển sang hệ thống trong suốt - tôi nghĩ - nhưng dường như có thứ gì đó bên dưới chế độ xem của tôi có màu trắng - và làm xáo trộn nội dung cơ bản.

Nó chắc chắn là có thể, những kẻ làm điều đó:

https://play.google.com/store/apps/details?id=com.aitype.android.tablet.p&feature=search_result#?t=W251bGwsMSwxLDEsImNvbS5haXR5cGUuYW5kcm9pZC50YWJsZXQucCJd

+1

Bạn đã bao giờ tìm ra điều này chưa? Tôi đang cố gắng làm điều tương tự, và đang chạy vào cùng một vấn đề. –

Trả lời

5

I figured it out! Không chắc liệu đây có phải là cách các chàng trai trong liên kết cửa hàng trò chơi của bạn đã làm điều đó hay không, nhưng đây là điều đã làm việc cho tôi. Ngoài ra, tôi nhận ra bài đăng này đã hơn một tuổi, nhưng tôi vẫn trả lời nó chỉ trong trường hợp có ai đó phát hiện ra điều này khi cố gắng tạo ra một bàn phím trong suốt.

"Thứ gì đó" dưới chế độ xem của bạn thực sự không có gì - đó là không gian trống. Bàn phím của bạn đã đẩy toàn bộ tầm nhìn lên và ra khỏi con đường để nhường chỗ cho chiều cao của nó, để lại khoảng trắng trống phía sau. Bàn phím trong suốt của bạn cho phép không gian màu trắng này hiển thị qua.

Đây là giải pháp: thay vì trả lại chế độ xem của bạn trong onCreateInputView, hãy trả lại trong chế độ onCreateCandidatesView. Đó là chế độ xem thường nằm trên bàn phím và liệt kê các đề xuất tự động sửa. Nhưng bạn sẽ sử dụng nó để chứa bàn phím thực của bạn.

Lý do bạn muốn bàn phím của mình là chế độ xem ứng cử viên là vì chế độ xem đầu vào thường xuyên nhất đẩy chế độ xem cơ bản lên. Các ứng dụng riêng lẻ có thể quyết định cách chúng muốn hoạt động khi bàn phím được hiển thị qua android: windowSoftInputMode và chế độ xem đầu vào tôn trọng tùy chọn của chúng, nhưng chế độ xem ứng viên luôn sử dụng adjustPan.

Từ tài liệu: "Lưu ý rằng vì chế độ xem ứng viên có xu hướng được hiển thị và ẩn rất nhiều, nó không ảnh hưởng đến giao diện người dùng ứng dụng giống như giao diện nhập mềm: nó sẽ không bao giờ làm thay đổi kích thước cửa sổ ứng dụng, chỉ khiến chúng bị rám nắng nếu cần để người dùng nhìn thấy tiêu điểm hiện tại. " http://developer.android.com/reference/android/inputmethodservice/InputMethodService.html

Vì vậy, hãy trả lại chế độ xem trong suốt của bạn từ chế độ onCreateCandidatesView, trả về null từ onCreateInputView và đảm bảo gọi setCandidatesViewShown (true) để hiển thị ứng viên của bạn (tôi gọi nó trong onWindowShown).

+0

Điều này không có nghĩa là điều tương tự sẽ xảy ra nếu đầu vào của ứng dụng nằm ở cuối bố cục của ứng dụng? Để tránh làm mờ nó, Android sẽ xoay ứng dụng để nó thoát khỏi đầu màn hình, để trống sau bàn phím. –

+0

Đó là những gì nó sẽ làm nếu bạn sử dụng onCreateInputView. Như tôi đã giải thích, onCreateCandidatesView hoạt động khác nhau. Thử nghiệm một chút với nó; bạn sẽ thấy rằng đầu vào vẫn ở đúng vị trí của nó (trừ khi, có thể, nó nằm trong scrollview dọc. Tôi chưa thử) –

+0

Không, nếu bạn sử dụng chế độ xem đầu vào, Android sẽ xoay hoặc thay đổi kích thước cửa sổ theo cài đặt của hoạt động. Theo tài liệu bạn trích dẫn, khung nhìn ứng cử viên sẽ khiến hoạt động "bị rám nắng nếu cần thiết cho người dùng xem trọng tâm hiện tại". –

0

Thông thường InputMethodServices sử dụng màu nền giống với màu nền của ứng dụng liên kết hiện tại. Nếu bạn muốn làm cho điều này minh bạch, tôi nghĩ bạn nên làm cho nó như là cấu trúc cửa sổ popup, không phải là một cửa sổ inputmethod tôi nghĩ.

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