Cảm ơn bạn đã ghé thăm cộng đồng vietandroid.com. Đây là một cộng đồng mở và miễn phí vì vậy chúng tôi rất mong bạn hãy tham gia và hoạt động tích cực bằng cách đặt câu hỏi/thắc mắc hoặc những kinh nghiệm của bạn trong lập trình Android tới mọi người. Chúc bạn thành công !
+1 phiếu
đã hỏi trong Layout - UI/UX bởi (310 điểm)
Đã chọn lại chủ đề bởi
Chào mọi người,

Mình muốn làm cái từ điển dạng cửa sổ (floatting window) và chạm (thực ra là copy text) để dịch giống google translate nhỉ?

Bạn nào biết giúp mình với ạ.

Cảm ơn mọi người nhiều!

1 câu trả lời

0 phiếu
đã trả lời bởi (13.7k điểm)
được bầu chọn là câu hỏi hay nhất bởi
 
Câu trả lời hay nhất

Chào bạn,

 

Phần dữ liệu từ điển và cách tra cứu thì bạn tự lo liệu nhé, mình chỉ hướng dẫn bạn cách làm cái cửa sổ float thôi:

Những keyword bạn có thể search thêm google nhé: windowManager.addView, SYSTEM_ALERT, WindowManager.LayoutParams

Bước 1: Tạo layout theo ý bạn muốn như bạn tạo activity layout thông thường vậy

Bước 2: Add và show layout của bạn đã tạo ở bước 1 vào màn hình (main windows)

- Trước tiên bạn cần tạo một layoutparam -> cái này định nghĩa 1 view/layout sẽ được hiển thị như thế nào 

Ví dụ: 

WindowManager.LayoutParams(
        WindowManager.LayoutParams.WRAP_CONTENT,
        WindowManager.LayoutParams.WRAP_CONTENT,
        WindowManager.LayoutParams.TYPE_PHONE, //bạn có thể thay đổi thông số này thành SYSTEM_ALERT
        WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
        PixelFormat.TRANSLUCENT //làm cho layout của bạn trở nên trong suốt những phần không hiển thị (bên ngoài layout bạn đã tạo)

- Tiếp theo bạn add layout của bạn (nhớ dùng layout inflate để convert layout (xml) của bạn thành 1 view đã nhé (cái này chắc bạn quá rõ cách làm rồi)

Ví dụ: windowManager.addView(your_translate_view, your_layout_param);

//Lưu ý: tham chiếu tới windowManager như thế nào thì chắc bạn biết rồi nhỉ.

Bước 3: Vậy là bạn đã có 1 cửa số float như ý bạn muốn rồi nhé.

 

Chúc thành công !

 

 

đã bình luận bởi (310 điểm)
Cám ơn bạn.

Mình còn vướng chút chổ: làm sao để app mình chạy ngầm (có độ ưu tiên cao, không hoặc khó bị kill bởi hdh) -> để mỗi lần có copy 1 text gì đó, mình sẽ hiện cái float window lên lại???

Have a nice day!
đã bình luận bởi (13.7k điểm)
Bạn có thể build 1 background service để chạy ngầm nhé. Và để khó bị kill hay đúng hơn khi sau khi bị kill nó sẽ tự động chạy lại thì trong event onStartCommand bạn return về STICKY flag là được nhé. hoặc khi start service bạn set intent flag là FLAG_STICKY
đã bình luận bởi (310 điểm)
Cảm ơn bạn rất nhiều!
đã bình luận bởi (310 điểm)
Bạn cho mình hỏi thêm chút được không ạ.
Ví dụ mình muốn ứng dụng của mình không bắt chữ khi người dùng copy mà muốn bắt chữ khi người dùng select cái text ở bất kỳ đâu(bất kì chổ nào có thể select text được) thì có được ko ạ.
Mình thử tìm google nhiều rồi, nhưng có vẻ không được. App của mình không can thiệp được app khác .. Chỉ có cách là capture cái text đó bằng chụp màn hình. :(.
Nên mình mạo muội hỏi lên đây. Nhờ các bạn có kinh nghiệm chia sẻ với ạ
Cám ơn bạn nhiều :)
đã bình luận bởi (13.7k điểm)
Bạn thấy đó, google translate làm được thì app của bạn cũng làm được :D. Bạn tìm hiểu về clipboard manager nhé vì mỗi lần user copy thứ gì đó thì sẽ được lưu tạm thời vào clipboard.

http://www.tutorialspoint.com/android/android_clipboard.htm
đã bình luận bởi (310 điểm)
Hi,

Không phải bạn ơi, ý mình là làm hơn google translate luôn í. Mình bắt text đoạn người dùng select luôn í, không phải copy.
Mà có vẻ không được rồi, thằng google cũng làm được tới đoạn copy thôi :))

Cám ơn bạn nhiều!
đã bình luận bởi (13.7k điểm)
Google translate cũng không làm được như thế luôn :D. Chịu khó đọc từ clipboard ra và làm giao diện chuẩn tí là ngon rồi bạn @@
...