У меня есть действие, в котором я показываю DatePickerDialog
в событии нажатия кнопки, например:
Я моделирую события касания в элементах действия, используя методы MotionEvent
и dispatchTouchEvent
на основе координат (x, y) , который я получаю от своего бэкэнда. Это отлично работает во всех случаях, за исключением случаев, когда макет всплывающего типа показан как dropdown
или dialog
.
В основном мой метод simulateClick
не работает при изменении windowFocus
!
Мой вопрос:
В настоящее время события касания происходят на элементах под диалоговым окном (т.е. только на уровне активности). Это похоже на наличие элемента z-index
на экране, и события происходят на z-index:0
, тогда как я хочу, чтобы они происходили на более высоком z-index
, то есть на плавающих представлениях / макетах и т. д. c. Как это реализовать?
Код выбора даты активности
dateBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// Get Current Date
final Calendar c = Calendar.getInstance();
mYear = c.get(Calendar.YEAR);
mMonth = c.get(Calendar.MONTH);
mDay = c.get(Calendar.DAY_OF_MONTH);
DatePickerDialog datePickerDialog = new DatePickerDialog(HomeLoanActivity.this,
new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year,
int monthOfYear, int dayOfMonth) {
Log.d("DATE", "onDateSet: "+(dayOfMonth + "-" + (monthOfYear + 1) + "-" + year));
}
}, mYear, mMonth, mDay);
datePickerDialog.show();
}
});
Код клика для имитации активности
private void simulateClick(float x, float y) {
long downTime = SystemClock.uptimeMillis();
long eventTime = SystemClock.uptimeMillis();
MotionEvent motionEvent = MotionEvent.obtain(downTime, eventTime, MotionEvent.ACTION_DOWN, x, y, -1);
dispatchTouchEvent(motionEvent);//touch the finger
motionEvent.setAction(MotionEvent.ACTION_UP);
dispatchTouchEvent(motionEvent);//lift the finger
Log.d(TAG, "simulateClick: complete");
}