Làm thế nào để Facebook tạo Chat Heads trên Android? API để tạo các chế độ xem nổi trên đầu trang của tất cả các chế độ xem khác là gì?
Làm thế nào để Facebook tạo Chat Heads trên Android? API để tạo các chế độ xem nổi trên đầu trang của tất cả các chế độ xem khác là gì?
Câu trả lời:
Đây là một:
Cho phép ứng dụng mở các cửa sổ bằng cách sử dụng loại TYPE_SYIUS_ALERT, được hiển thị trên đầu trang của tất cả các ứng dụng khác. Rất ít ứng dụng nên sử dụng quyền này; các cửa sổ này được dành cho tương tác cấp hệ thống với người dùng.
Giá trị không đổi: "ERIC.SYIUS_ALERT_WINDOW"
// EDIT: Mã đầy đủ ở đây :
public class ChatHeadService extends Service {
private WindowManager windowManager;
private ImageView chatHead;
@Override public IBinder onBind(Intent intent) {
// Not used
return null;
}
@Override public void onCreate() {
super.onCreate();
windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
chatHead = new ImageView(this);
chatHead.setImageResource(R.drawable.android_head);
WindowManager.LayoutParams params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.TYPE_PHONE,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
PixelFormat.TRANSLUCENT);
params.gravity = Gravity.TOP | Gravity.LEFT;
params.x = 0;
params.y = 100;
windowManager.addView(chatHead, params);
}
@Override
public void onDestroy() {
super.onDestroy();
if (chatHead != null) windowManager.removeView(chatHead);
}
}
Đừng quên bắt đầu dịch vụ bằng cách nào đó:
startService(new Intent(context, ChatHeadService.class));
.. Và thêm dịch vụ này vào Bản kê khai của bạn.
Theo quy định, các hoạt động của Android là toàn màn hình, các UI dành riêng về mặt khái niệm có tất cả các tương tác. Có một vài ngoại lệ cho điều này. Để bắt đầu, có các hộp thoại bật lên không lấp đầy màn hình. Một cái khác là bánh mì nướng Android, một cửa sổ bật lên không tương tác - bạn không thể chạm vào nó và nếu bạn thử nó sẽ đi đến bất cứ thứ gì bên dưới.
Bạn cũng có thể làm UI đặc biệt của riêng mình. Bạn có thể thêm các khung nhìn trực tiếp vào WindowManager
, chỉ định một loại cờ. Người đứng đầu trò chuyện có thể sử dụng TYPE_PHONE . Có một vài loại tương tự, nhưng mục đích là như nhau: lớp phủ mục đích đặc biệt có thể xuất hiện trên đầu của bất kỳ thứ gì khác mà không có ứng dụng mẹ rõ ràng có mặt.
Điều đó chỉ đưa bạn đến nay, mặc dù, vì các vấn đề với tương tác. Lúc đầu, lớp phủ của bạn sẽ hấp thụ tất cả các tương tác, do đó, không chỉ người đứng đầu nhận được các sự kiện, mà bạn còn chặn sự tương tác với mọi thứ bên dưới.
Bạn định cấu hình hành vi này bằng cách sử dụng LayoutParams . FLAG_NOT_TOUCH_MODAL
có nghĩa là các sự kiện bên ngoài khu vực hiển thị của bạn đi đến các UI bên dưới. Bây giờ bạn sẽ thấy nó hoạt động, nhưng những điều tồi tệ khác vẫn xảy ra, như các nút quay lại / menu không được chuyển hướng đến các ứng dụng, cộng với không có bàn phím. Để giải quyết mà bạn cần FLAG_NOT_FOCUSABLE
.
Bạn cũng nhận được một hiệu ứng phụ từ bit không thể lấy nét, đây không phải là tương tác tốt với lớp phủ của bạn nữa, ví dụ như nhấn nút. Mặc dù vậy, bạn có thể nhận được một số sự kiện chạm cơ bản, điều mà bạn luôn có thể thực hiện toán học và điều đó có lẽ là đủ cho Chat Heads. Chỉ cần lưu ý rằng nó để bạn tự mình trong nhiều lĩnh vực, như hoạt hình UI.
Một tổng quan tốt về chi tiết, bao gồm cho phép tiêu thụ tương tác có chọn lọc, có thể được tìm thấy trong luồng StackOverflow này . Cụ thể, một trong những liên kết trả lời cuối cùng sẽ đưa bạn đến đây , đó là một dự án ví dụ hay. Lưu ý rằng ICS đã thay đổi cách thức hoạt động một chút, nhưng các chủ đề giải thích điều đó.
Đây là tất cả các công cụ API công khai, nhưng nó không thực sự giống như một thứ chính thống mà người ta phải làm như một vấn đề tất nhiên. Tài liệu này chứa đầy các tài liệu tham khảo về các hành vi ứng dụng hệ thống đặc biệt và với lý do chính đáng; Nếu mọi người đã làm điều đó thì sao?
Đầu Springy cho hành vi dựa trên mùa xuân của đầu trò chuyện ra khỏi hộp. Tất cả những gì bạn phải xác định là có thể rút ra được cho phần đầu trò chuyện và đoạn để mở khi đầu trò chuyện được nhấp. Các đầu trò chuyện sụp đổ khi thu nhỏ và theo ngón tay khi kéo.
Dự án bao gồm một ứng dụng demo thể hiện tất cả các chức năng được xây dựng. Để sử dụng nó, bạn cần thêm nó vào phụ thuộc lớp của bạn.
compile 'com.flipkart.springyheads:library:0.9.6'