图像视图 单击在安卓服务自定义布局中不起作用



ImageView 单击不适用于在 android 服务中创建的自定义布局。

public class CallService extends Service {
String incomingnumber;
@Nullable
@Override
public IBinder onBind(Intent intent) {
    return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    incomingnumber = intent.getExtras().getString("incomingnumber");
    System.out.println("=== onStartCommand incomingnumber : " + incomingnumber);
    return super.onStartCommand(intent, flags, startId);
}
@Override
public void onCreate() {
    super.onCreate();
    final Context context = getApplicationContext();
    WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
    LayoutInflater inflater = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    ViewGroup mView = (ViewGroup) inflater.inflate(R.layout.testactivity, null);
    WindowManager.LayoutParams params = new WindowManager.LayoutParams(
            WindowManager.LayoutParams.MATCH_PARENT,
            WindowManager.LayoutParams.MATCH_PARENT,
            WindowManager.LayoutParams.TYPE_PHONE,
            WindowManager.LayoutParams.TYPE_SYSTEM_ALERT,
            WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
                    | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL);

    ImageView imgCallPick = mView.findViewById(R.id.imgCallPick);
    ImageView imgCaller = mView.findViewById(R.id.imgCaller);
    imgCaller.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            System.out.println("===== imgCaller");
            return false;
        }
    });
    wm.addView(mView, params);
} }

我只是在服务中创建自定义布局,布局包含差异视图,但图像视图单击不起作用。 有什么解决方案吗,然后帮助我。

谢谢

从这个答案: 安卓 - 点击图片查看

在 xml 布局中添加:

android:clickable="true">

此问题是由于使用了已弃用的参数

WindowManager.LayoutParams.TYPE_PHONE

用于获取触摸事件

如果你想要一个彩色的背景,请使用这个

 WindowManager.LayoutParams params = new WindowManager.LayoutParams(
            WindowManager.LayoutParams.MATCH_PARENT,
            WindowManager.LayoutParams.MATCH_PARENT,
            WindowManager.LayoutParams.TYPE_SYSTEM_ALERT,
            WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
                    | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
                    | WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH,
            PixelFormat.RGB_565);

如果你想要一个透明的背景,请使用这个

WindowManager.LayoutParams params = new WindowManager.LayoutParams(
            WindowManager.LayoutParams.MATCH_PARENT,
            WindowManager.LayoutParams.MATCH_PARENT,
            WindowManager.LayoutParams.TYPE_SYSTEM_ALERT,
            WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
                    | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
                    | WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH,
            PixelFormat.TRANSPARENT);

其他一切都保持不变:)