Android 12는 벨소리 및 설정 아이콘 등을 숨기고 미디어 볼륨 막대가 볼륨 막대 대화 상자를 차지하여 터치 문제가 발생합니다.
화면이 가로일 때 오른쪽 영역만 터치 가능; 화면이 세로일 때 터치할 수 없는 상단 영역이 있음,
그렇지 않으면 action_outside가 트리거되고 볼륨 막대가 닫힘
- mDialog.setContentView(R.layout.volume_dialog); //전체 볼륨 바
- mDialogView = mDialog.findViewById(R.id.volume_dialog); // 터치하여 미디어 볼륨 수정
- mDialogRowsView = mDialog.findViewById(R.id.volume_dialog_rows); //하나의 볼륨 그리드
private void setupRingerDrawer() {
***
// In portrait, add padding to the bottom to account for the height of the open ringer
// drawer.
if (!isLandscape()) {
mDialogView.setPadding(
mDialogView.getPaddingLeft(),
mDialogView.getPaddingTop(),
mDialogView.getPaddingRight(),
mDialogView.getPaddingBottom() + getRingerDrawerOpenExtraSize()); //竖屏加padding到底部
} else {
mDialogView.setPadding(
mDialogView.getPaddingLeft() + getRingerDrawerOpenExtraSize(), //横屏时加paddding到左边
mDialogView.getPaddingTop(),
mDialogView.getPaddingRight(),
mDialogView.getPaddingBottom());
}
}
private void unionViewBoundstoTouchableRegion(final View view) {
...
// The ringer and rows container has extra height at the top to fit the expanded ringer
// drawer. This area should not be touchable unless the ringer drawer is open.
//翻译:振铃器和行容器在顶部有额外的高度,以适应扩展的振铃器//抽屉。这个区域不应该被触摸,除非铃声抽屉是打开的。
if (view == mTopContainer && !mIsRingerDrawerOpen) {
if (!isLandscape()) {
y += getRingerDrawerOpenExtraSize();
} else {
x += getRingerDrawerOpenExtraSize();
}
}
...
}
diff:
/**
* 隐藏了铃声等其他音量条,所以需要去除掉它们的padding 使得媒体音量条占满音量条区域
* Return the size of the 1-2 extra ringer options that are made visible when the ringer drawer
* is opened. The drawer options are square so this can be used for height calculations (when in
* portrait, and the drawer opens upward) or for width (when opening sideways in landscape).
*/
private int getRingerDrawerOpenExtraSize() {
// return (mRingerCount - 1) * mRingerDrawerItemSize;
return 0;
}