Facebook是如何在Android上创建聊天头的?在所有其他视图之上创建浮动视图的API是什么?

推荐答案

This一:

允许应用程序使用类型打开windows

常量值:"android.permission.SYSTEM_ALERT_WINDOW"

//编辑:

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);
  }
}

别忘了以某种方式启动这项服务:

startService(new Intent(context, ChatHeadService.class));

…并将此服务添加到您的 list 中.

Android相关问答推荐

当我的Log.i()不在主线程中时,如何在我的logcat中显示它?

如何使用视图模型触发可变状态?

如何处理穿戴构图上的长点击事件?

Android 14(Oneui 6)中的本地推送通知行为不一致

对支持哪些数据存储区方法感到困惑

在Android 14/SDK 34中使用RegisterReceiver的正确方式是什么?

StateFlow和LazyColumn重组

使用Android Jetpack Compose,为子Composable定义ViewModel是不是一种糟糕的做法?

Modifer.Align()不适用于行/列/框中的文本.未解决的作用域实例错误

Jetpack Compose:如何将文本放置在行的右侧?

Visual Studio 2022,毛伊岛,Android Emulator:无法更改内存量

SDK 33 的问题 - 面向 S+(版本 31 及更高版本)要求在创建 PendingIntent 时指定 FLAG_IMMUTABLE 或 FLAG_MUTABLE 之一

如何在 kotlin 中接收带有和不带有可空对象的集合并保持引用相同

围绕动态大小的内容包装 Jetpack Compose Row?

状态更改后 colored颜色 未正确更改

Android collectAsStateWithLifecycle() 不在可组合内部收集

无法通过 retrofit 解析对 kotlin 数据类的 xml 响应

我不能在 jetpack Compose 中使用 TextField()(material 3)

Jetpack Compose Alignment - 误解了 alignBy 修饰符

Сan 无法从 Firestore 获取数据,没有错误