it-roy-ru.com

Scrollview не прокручивается в нижней части Android

Я попробовал новое BottomSheet в поддержке Android. Внутри BottomSheet я поместил TextView и ScrollView. BottomSheet показывает просто отлично, единственная проблема, которую я обнаружил, заключается в том, что ScrollView в BottomSheet не прокручивается. Каждый раз, когда я пытаюсь прокрутить, либо раскручиваем макет в основном действии, либо изменяемое состояние BottomSheet из коллапса в раскрывающееся.

это фрагмент моего кода класса активности:

private BottomSheetBehavior behavior;
View bottomSheet;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    setTextViewOnClickListener(this, findViewById(R.id.parentLayout));

    CoordinatorLayout coordinatorLayout = (CoordinatorLayout) findViewById(R.id.main_content);

    // The View with the BottomSheetBehavior
    bottomSheet = coordinatorLayout.findViewById(R.id.bottom_sheet);
    behavior = BottomSheetBehavior.from(bottomSheet);
    behavior.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() {
        @Override
        public void onStateChanged(@NonNull View bottomSheet, int newState) {
            // React to state change


        }


        @Override
        public void onSlide(@NonNull View bottomSheet, float slideOffset) {
            // React to dragging events
        }
    });

@Override
public void onClick(View v) {
    switch (v.getId()) {
        case R.id.tv1:
            setTextViewHeader("Header1");
            setTextViewContent("Long_Text_1");

            break;

        case R.id.tv2:
            setTextViewHeader("Header2");
            setTextViewContent("Long_Text_2");

            break;

        case R.id.tv3:
            setTextViewHeader("Header3");
            setTextViewContent("Long_Text_3");

            break;

        default:
            break;
    }

    behavior.setPeekHeight(100);
    behavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
    behavior.setHideable(true);

    bottomSheet.requestLayout();
}

Это мой макет XML:

<?xml version="1.0" encoding="utf-8"?>
<Android.support.design.widget.CoordinatorLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
xmlns:tools="http://schemas.Android.com/tools"
Android:id="@+id/main_content"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:fitsSystemWindows="true"
tools:context="com.rapidgrowsolutions.Android.MainActivity">


<Android.support.design.widget.AppBarLayout
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:theme="@style/AppTheme.AppBarOverlay">


    <Android.support.v7.widget.Toolbar
        Android:id="@+id/toolbar"
        Android:layout_width="match_parent"
        Android:layout_height="?attr/actionBarSize"
        Android:background="?attr/colorPrimary"
        app:layout_scrollFlags="scroll|enterAlways"
        app:popupTheme="@style/AppTheme.PopupOverlay" />


</Android.support.design.widget.AppBarLayout>


<LinearLayout
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:orientation="vertical">

    <TextView
        Android:id="@+id/tv1"
        style="@style/LightRow"
        Android:text="some_long_text_here" />

    <TextView
        Android:id="@+id/tv2"
        style="@style/DarkRow"
        Android:text="another_long_text_here" />

    <TextView
        Android:id="@+id/tv3"
        style="@style/LightRow"
        Android:text="another_long_text_here" />
</LinearLayout>

<Android.support.v4.widget.NestedScrollView
    Android:id="@+id/bottom_sheet"
    Android:layout_width="match_parent"
    Android:layout_height="250dp"
    app:behavior_hideable="true"
    Android:fillViewport="true"
    app:layout_behavior="Android.support.design.widget.BottomSheetBehavior">


    <Android.support.v7.widget.LinearLayoutCompat
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:background="#FF7733"
        Android:orientation="vertical">


        <TextView
            Android:id="@+id/tvID1"
            Android:layout_width="match_parent"
            Android:layout_height="wrap_content"
            Android:layout_weight="1"
            Android:text="HEADER"
            Android:textAppearance="?android:attr/textAppearanceMedium" />

        <ScrollView
            Android:layout_width="match_parent"
            Android:layout_height="match_parent"
            Android:layout_weight="9"
            Android:background="#ffb773"
            Android:fillViewport="true">


            <TextView
                Android:id="@+id/tvID2"
                Android:layout_width="match_parent"
                Android:layout_height="wrap_content"
                Android:background="#3377ff"
                Android:textAppearance="?android:attr/textAppearanceSmall" />
        </ScrollView>


    </Android.support.v7.widget.LinearLayoutCompat>

</Android.support.v4.widget.NestedScrollView>

Пожалуйста помоги.

Спасибо

11
asiansaga

Надеюсь, вы уже поняли это, но измените View bottomSheet на NestedScrollView bottomSheet.

11
Chris Nguyen

Используйте ниже настраиваемое поведение нижнего листа

public class CustomBottomSheetBehaviour<V extends View> extends BottomSheetBehavior {
    public CustomBottomSheetBehaviour() {
        super();
    }

    public CustomBottomSheetBehaviour(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    public boolean onInterceptTouchEvent(CoordinatorLayout parent, View child, MotionEvent event) {
        return false;
    }
}
1
Aghil C M

Еще не проверял, сработал ли ответ @Aghil C M, но перевел его на kotlin, так как автоматический перевод не сработал.

class CustomBottomSheetBehaviour<V : View> : BottomSheetBehavior<V> {
    constructor() : super()

    constructor(context: Context, attrs: AttributeSet) : super(context, attrs)

    override fun onInterceptTouchEvent(parent: CoordinatorLayout?, child: V, event: MotionEvent?): Boolean {
        return false
    }
}
0
jobbert

Я решил проблему, выполнив следующие вещи -

  • Во-первых: не используйте ScrollView, когда вы используете CoordinatorLayout, вместо этого пользователь NestedScrollView намного лучше работает с CoordinatorLayout.

  • Второе: поместите пустой вид с Android:layout_height внизу, но внутри вас NestedScrollVieweg -

    <LinearLayout
        Android:layout_height="wrap_content"
        Android:layout_width="match_parent"
        Android:orientation="vertical">
    
        <ImageView
            Android:background="@drawable/username"
            Android:id="@+id/userImage_info_search"
            Android:layout_gravity="center"
            Android:layout_height="100dp"
            Android:layout_margin="20dp"
            Android:layout_width="100dp" />
    
        <LinearLayout
            Android:layout_height="wrap_content"
            Android:layout_width="match_parent">
    
        <View
            Android:background="@Android:color/black"
            Android:layout_height="1dp"
            Android:layout_width="match_parent"></View>
    </LinearLayout>
    
    <LinearLayout
        Android:layout_height="wrap_content"
        Android:layout_width="match_parent"
        Android:orientation="horizontal"
        Android:padding="10dp"
        Android:weightSum="3">
    
        <TextView
            style="@style/Bottomsheetstyle"
            Android:id="@+id/txtNamelabel_info_search"
            Android:layout_gravity="center"
            Android:layout_height="wrap_content"
            Android:layout_marginLeft="10dp"
            Android:layout_weight="1"
            Android:layout_width="0dp"
            Android:text="Name" />
    
        <TextView
            style="@style/Bottomsheetstyle"
            Android:id="@+id/txtName_info_search"
            Android:layout_gravity="center"
            Android:layout_height="wrap_content"
            Android:layout_marginLeft="10dp"
            Android:layout_weight="2"
            Android:layout_width="0dp"
            Android:text="" />
    
    
    </LinearLayout>
    
    <LinearLayout
        Android:layout_height="wrap_content"
        Android:layout_width="match_parent">
    
        <View
            Android:background="@Android:color/black"
            Android:layout_height="1dp"
            Android:layout_width="match_parent"></View>
    </LinearLayout>
    
    <LinearLayout
        Android:layout_height="wrap_content"
        Android:layout_width="match_parent"
        Android:orientation="horizontal"
        Android:padding="10dp"
        Android:weightSum="3">
    
        <TextView
            style="@style/Bottomsheetstyle"
            Android:layout_gravity="center"
            Android:layout_height="wrap_content"
            Android:layout_marginLeft="10dp"
            Android:layout_weight="1"
            Android:layout_width="0dp"
            Android:text="Number" />
    
        <LinearLayout
            Android:layout_height="wrap_content"
            Android:layout_weight="2"
            Android:layout_width="0dp"
            Android:orientation="horizontal">
    
            <TextView
                style="@style/Bottomsheetstyle"
                Android:gravity="center_vertical"
                Android:id="@+id/txtNumber_info_search"
                Android:layout_gravity="center_vertical"
                Android:layout_height="wrap_content"
                Android:layout_marginLeft="10dp"
                Android:layout_weight="1.4"
                Android:layout_width="0dp"
                Android:text="+XX (XXX) XXX-XXXX" />
    
            <ImageView
                Android:background="@drawable/call_save"
                Android:id="@+id/call_info_search"
                Android:layout_height="wrap_content"
                Android:layout_weight="0.3"
                Android:layout_width="0dp" />
    
            <View
                Android:layout_gravity="center"
                Android:layout_height="5dp"
                Android:layout_width="5dp"></View>
    
            <ImageView
                Android:background="@drawable/comment_save"
                Android:id="@+id/sms_info_search"
                Android:layout_height="wrap_content"
                Android:layout_weight="0.3"
                Android:layout_width="0dp" />
    
    
        </LinearLayout>
    
    
    </LinearLayout>
    
    <LinearLayout
        Android:layout_height="wrap_content"
        Android:layout_width="match_parent">
    
        <View
            Android:background="@Android:color/black"
            Android:layout_height="1dp"
            Android:layout_width="match_parent"></View>
    </LinearLayout>
    
    <LinearLayout
        Android:layout_height="wrap_content"
        Android:layout_width="match_parent"
        Android:orientation="horizontal"
        Android:padding="10dp"
        Android:weightSum="3">
    
        <TextView
            style="@style/Bottomsheetstyle"
            Android:layout_gravity="center"
            Android:layout_height="wrap_content"
            Android:layout_marginLeft="10dp"
            Android:layout_weight="1"
            Android:layout_width="0dp"
            Android:text="Email" />
    
        <TextView
            style="@style/Bottomsheetstyle"
            Android:id="@+id/txtEmail_info_search"
            Android:layout_gravity="center"
            Android:layout_height="wrap_content"
            Android:layout_marginLeft="10dp"
            Android:layout_weight="2"
            Android:layout_width="0dp"
            Android:text="" />
    
    
    </LinearLayout>
    
    <LinearLayout
        Android:layout_height="wrap_content"
        Android:layout_width="match_parent">
    
        <View
            Android:background="@Android:color/black"
            Android:layout_height="1dp"
            Android:layout_width="match_parent"></View>
    </LinearLayout>
    
    <View
        Android:background="@Android:color/transparent"
        Android:layout_height="@dimen/somedp"
        Android:layout_width="match_parent" />
    

0
VaiVirus