Android8.1 Launcher3 HotSeat에서 폴더 만들기 금지

5929 단어 Android
Android8.1 Launcher3 HotSeat에서 폴더 만들기 금지
이것은 지난 블로그에서 남긴 문제로 원래 폴더 양식을 수정하는 것과 함께 수정하려고 하였으나 같은 것이 아니라는 것을 발견하여 단독으로 열거하였다.인터넷에서 검색해 봤는데 이 블로그 Launcher3을 참고하여 hotseat 표시줄을 고정시키고 드래그를 금지하며 폴더를 형성하는 것을 금지했다. 그러나 이 블로그의 코드는 나의 코드와 다르다. 그래서 다시 자원을 찾았는데 적당한 것을 발견하지 못하고 스스로 코드를 보려고 애썼다.여전히 그 블로그를 참고했습니다. 저는 src/com/android/launcher3/Workspace.java-> createUserFolderIfNecessary () 내부 판단
boolean createUserFolderIfNecessary(View newView, long container, CellLayout target,
            int[] targetCell, float distance, boolean external, DragView dragView,
            Runnable postAnimationRunnable) {
        //     begin
        if (container == LauncherSettings.Favorites.CONTAINER_HOTSEAT) {
            return false;
        }
        //     end
        if (distance > mMaxDistanceForFolderCreation) return false;
        View v = target.getChildAt(targetCell[0], targetCell[1]);
......
}

HotSeat 내부에 폴더를 만들지 않고 실행하면 효과가 있는 것 같습니다.문제는 이때 폴더를 만들지 않지만 HotSeat에서 하나의 앱을 끌어서 목표 앱 위에 놓으면 폴더의 허영(일단 이렇게 부르면)이 나타난다(이상적인 상태는 목표 앱이 바로 옆으로 이동해야 한다). 프로젝트 시간이 급하지만 이것은 사용자 체험에 영향을 미치기 때문에 해결해야 한다.
처음에createUserFolderIfNecessary()라는 방법과 관련이 있다고 생각했지만 찾아보니 틀렸다.그래서 이 방법을 따라 src/com/android/launcher3/Workspace를 위로 찾습니다.java -> onDrop() ./src/com/android/launcher3/dragndrop/DragController.java -> drop() ./src/com/android/launcher3/dragndrop/DragController.java -> onDriverDragEnd() ./src/com/android/launcher3/dragndrop/DragDriver.java -> onTouchEvent(); 여기를 찾으면 비교적 명확해진다. 허영은 틀림없이 이 터치 사건과 관련이 있을 것이다
 public boolean onTouchEvent(MotionEvent ev) {
        final int action = ev.getAction();

        switch (action) {
            case MotionEvent.ACTION_MOVE:
                mEventListener.onDriverDragMove(ev.getX(), ev.getY());
                break;
            case MotionEvent.ACTION_UP:
                mEventListener.onDriverDragMove(ev.getX(), ev.getY());
                mEventListener.onDriverDragEnd(ev.getX(), ev.getY());
                break;
            case MotionEvent.ACTION_CANCEL:
                mEventListener.onDriverDragCancel();
                break;
        }

        return true;
    }

move 시간을 따라 아래를 찾습니다.src/com/android/launcher3/dragndrop/DragController.java -> onDriverDragMove() ./src/com/android/launcher3/dragndrop/DragController.java -> handleMoveEvent() ./src/com/android/launcher3/dragndrop/DragController.java -> checkTouchMove() src/com/android/launcher3/Workspace.java -> onDragOver()
public void onDragOver(DragObject d) {
......
float targetCellDistance = mDragTargetLayout.getDistanceFromCell(
                    mDragViewVisualCenter[0], mDragViewVisualCenter[1], mTargetCell);

            manageFolderFeedback(mDragTargetLayout, mTargetCell, targetCellDistance, d);

            boolean nearestDropOccupied = mDragTargetLayout.isNearestDropLocationOccupied((int)
                    mDragViewVisualCenter[0], (int) mDragViewVisualCenter[1], item.spanX,
                    item.spanY, child, mTargetCell);
......
}

여기서 매니지먼트 Folder Feedback()을 보니 순간적으로 내가 장소를 찾았다고 느꼈다. 비록 나는 영어를 잘하지 못하지만 이feedback은 비교적 명확하다. 들어가는 방법을 살펴보자.
private void manageFolderFeedback(CellLayout targetLayout,
            int[] targetCell, float distance, DragObject dragObject) {
        if (distance > mMaxDistanceForFolderCreation) return;

        final View dragOverView = mDragTargetLayout.getChildAt(mTargetCell[0], mTargetCell[1]);
        ItemInfo info = dragObject.dragInfo;

      boolean userFolderPending = willCreateUserFolder(info, dragOverView, false);

느낌에 의하면 이곳이 될 것 같다(will Create User Folder (). 판단을 추가하자
boolean userFolderPending = willCreateUserFolder(info, dragOverView, false)
                && !mLauncher.isHotseatLayout(targetLayout);

운행해서 이 문제를 해결해라.지금까지 Launcher 전체가 기본적으로 사용 가능합니다!

좋은 웹페이지 즐겨찾기