>source

레이아웃 :NestedScrollView 내에 EditText와 2 개의 RecyclerView가 있는데 보이지 않습니다 (visibility = gone).

<androidx.coordinatorlayout.widget.CoordinatorLayout 
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    //... toolbar
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        app:layout_behavior="@string/appbar_scrolling_view_behavior">
        <androidx.core.widget.NestedScrollView
            android:id="@+id/scrollView"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_marginBottom="?attr/actionBarSize"
            android:fillViewport="true"
            android:scrollbars="vertical">
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:orientation="vertical">
                <EditText
                    android:id="@+id/editText"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:layout_weight="1"
                    android:backgroundTint="@android:color/transparent"
                    android:gravity="top"
                    android:inputType="textMultiLine|textCapSentences"
                    android:padding="@dimen/activity_margin"
                    android:singleLine="false" />
                <androidx.recyclerview.widget.RecyclerView
                    android:id="@+id/rv_items"
                    android:padding="@dimen/activity_margin"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:scrollbars="vertical"
                    android:visibility="gone" />
                <androidx.recyclerview.widget.RecyclerView
                    android:id="@+id/rv_Labels"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:padding="12dp"
                    android:visibility="gone" />
            </LinearLayout>

        </androidx.core.widget.NestedScrollView>
    </LinearLayout>
    <androidx.coordinatorlayout.widget.CoordinatorLayout
        android:id="@+id/coordinator_layout"
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:layout_gravity="bottom"
        android:layout_marginBottom="?actionBarSize" />
    <com.google.android.material.bottomnavigation.BottomNavigationView
        //...
    />

</androidx.coordinatorlayout.widget.CoordinatorLayout>

문제 :화면 높이보다 많은 텍스트를 입력하면 EditText가 아래로 스크롤되어 커서가있는 위치로 이동합니다. 그러나 위로 스크롤하려고하면 아무 일도 일어나지 않습니다. 내가 만든 화면 녹화입니다.

스크롤 할 수 없습니다 :

  • 긴 텍스트를 처음 입력/붙여 넣은 후

스크롤 가능 :

  • 텍스트가 이미 입력 된 활동을 다시 연 후
  • 키보드를 닫은 후
  • 키보드를 닫았다가 다시 연 후

유사한 문제 검색 :

  • ScrollView 내에서 스크롤 할 수없는 EditText
  • ScrollView 및 ViewFlipper 내에서 스크롤 가능한 EditText를 활성화하십시오
  • ...와 같은 대답을 가진 다른 결과 :

...

editText.setOnTouchListener(new OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        if (v.getId() == R.id.editText) {
            v.getParent().requestDisallowInterceptTouchEvent(true);
            switch (event.getAction() & MotionEvent.ACTION_MASK) {
            case MotionEvent.ACTION_UP:
                v.getParent().requestDisallowInterceptTouchEvent(false);
                break;
            }
        }
        return false;
    }
});

이 솔루션이 작동하지 않습니다 :

  1. 질문은 NestedScrollView가 아니라 ScrollView에 관한 것입니다. 그리고 NestedScrollView는 제안 된 솔루션 중 하나입니다 (이미 사용 중)
  2. 위의 코드를 추가하면 EditText는 스크롤 가능하지만 키보드가 표시된 경우에만 가능합니다. 그렇지 않으면 스크롤이 불가능합니다. 스크롤을 시도하면 텍스트가 선택됩니다.
  3. 키보드를 연 상태에서 스크롤하면 커서가 이동합니다.

추가 정보가 필요하거나 누락 된 사항이 있으면 알려주십시오. 감사합니다!


  • 답변 # 1

    답은 실제로 생각보다 간단합니다. xml을 붙여 넣은 후 (그리고 누락 된 치수 등을 만들기 위해 필요한 변경을 한 후) 방금 EditText 의 높이를 변경했습니다.   wrap_content 로  버그가 사라졌습니다.

    답은 여기있다 : EditText 의 측정 값 비교   height=match_parent 와 왼쪽에 다른 시점에서  오른쪽 height=wrap_content 와 함께

    왼쪽 : 와이즈 비즈  특정 크기로 빈 화면에 그려진 텍스트를 붙여 넣으면 크기가 변경되지 않습니다.키보드 표시/숨기기는 화면 수명 동안 중요한 이벤트 중 하나이며구성 변경이라고합니다. 이렇게하면 요소가 다시 측정되어 다시 그려집니다.

    오른쪽 : EditText 의 높이를 변경하면   EditText 로  삽입 직후 측정을 강제 실행하고 다시 그립니다.

    이것이 도움이되기를 바랍니다 :)

    wrap_content

  • 이전 python - 사용자가 업로드 한 html 파일을 포함하는 방법 - 장고
  • 다음 Can&#39;t upgrade to Angular 8 - angular 8로 업그레이드 할 수 없습니다 - 앱을 실행하면 httpxsrfinterceptor에서 오류가 발생합니다