2013-05-15 38 views
9

nổi Tôi đang viết một ứng dụng có sử dụng đoạn mã sau để vẽ một EditText trên màn hình trên ứng dụng đang chạy:Android - Bàn phím không xuất hiện trong cửa sổ

WindowManager.LayoutParams params = new WindowManager.LayoutParams(
       WindowManager.LayoutParams.WRAP_CONTENT, 
       WindowManager.LayoutParams.WRAP_CONTENT, 
       WindowManager.LayoutParams.TYPE_PHONE, 
       WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE 
        | WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM, 
       PixelFormat.TRANSLUCENT); 

windowManager = (WindowManager) getSystemService(WINDOW_SERVICE); 

windowManager.addView(mEditText, params); 

Các xml cho EditText là:

<EditText 
      android:id="@+id/mEditText" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:maxLines="3" 
      android:inputType="textAutoComplete|text" 
      android:focusable="true" 
      android:focusableInTouchMode="true" /> 

Tuy nhiên, việc tập trung vào việc này không mang lại bàn phím. Tôi cũng đã cố gắng lập trình đưa nó lên với một onFocusListener:

mEditText.setOnFocusChangeListener(new View.OnFocusChangeListener() { 
      @Override 
      public void onFocusChange(View v, boolean hasFocus) { 
       if(hasFocus) { 
        Log.d("", "Has focus"); 
        ((InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE)).showSoftInput(v, InputMethodManager.SHOW_IMPLICIT); 
       } else { 
        Log.d("", "Lost focus"); 
       } 
      } 
     }); 

Nhưng mặc dù điều đó được gọi, như được thấy từ logcat, không có gì xảy ra. Phương pháp duy nhất tôi đã tìm thấy cho đến nay để hiển thị bàn phím đang sử dụng:

getSystemService(Context.INPUT_METHOD_SERVICE)).toggleSoftInput(0, 0); 

Nhưng điều đó dường như nhập vào màn hình chứ không phải vào văn bản. Tôi cũng đã cố gắng lấy nét rõ ràng khi văn bản được hiển thị nhưng không có kết quả.

Tôi đoán vấn đề là vì tôi đang sử dụng "cửa sổ nổi" nhưng phải có cách để thực hiện tác vụ này dưới dạng ứng dụng như máy tính nổi tồn tại trên cửa hàng playstore. ? Tôi đang bối rối :(

+0

Làm cách nào để nhận được giá trị từ văn bản chỉnh sửa? – rup35h

Trả lời

11

xấu của tôi .. Tôi nhận ra nếu tôi loại bỏ các WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE nó hoạt động tốt .. ngớ ngẩn sai lầm

+0

Nhưng sử dụng cờ này ngăn chặn bên ngoài nhà buttom clickable –

-1

Programatically:

editText.requestFocus(); 

Hoặc thông qua XML:

<EditText...> 
    <requestFocus /> 
</EditText> 
+0

Không ai trong số những người làm việc ở đây – crazyfool

4

Sử dụng WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL

WindowManager.LayoutParams params = new WindowManager.LayoutParams(
        WindowManager.LayoutParams.WRAP_CONTENT, 
        WindowManager.LayoutParams.WRAP_CONTENT, 
        WindowManager.LayoutParams.TYPE_PHONE, 
        WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL, 
        PixelFormat.TRANSLUCENT); 

Để biết thêm chi tiết và ví dụ theo liên kết: https://github.com/atifmahmood29/overlays-floating-window-like-facebook-messenger

+0

Cảm ơn đã lưu ngày của tôi –

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