web-dev-qa-db-fra.com

Scrollview ne défilant pas dans la feuille de calcul Android

J'ai essayé la nouvelle BottomSheet dans le support Android. Dans la BottomSheet j'ai mis une TextView et une ScrollView. Le BottomSheetsant parfait, le seul problème que j'ai trouvé est que le ScrollView dans le BottomSheet ne défile pas. Chaque fois que j'essaie de faire défiler, la présentation dans l'activité principale qui défile ou la variable BottomSheet à partir de la réduction pour la développer.

voici l'extrait de mon code de classe d'activité:

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();
}

Ceci est ma mise en page 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>

S'il vous plaît aider.

Merci

11
asiansaga

J'espère que vous avez compris cela maintenant, mais changez View bottomSheet en NestedScrollView bottomSheet.

11
Chris Nguyen

Utiliser ci-dessous le comportement personnalisé de la feuille de fond

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

Pas encore vérifié si la réponse de @Aghil C M fonctionnait, mais l'a traduite en kotlin car la traduction automatique ne faisait pas l'affaire.

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

J'ai résolu le problème en faisant ci-dessous des choses -

  • Tout d'abord: n'utilisez pas ScrollView lorsque vous utilisez CoordinatorLayout, mais l'utilisateur NestedScrollView fonctionne beaucoup mieux avec CoordinatorLayout.

  • Deuxièmement: mettez une vue vierge avec Android:layout_height en bas, mais à l'intérieur de vous NestedScrollView , Par exemple -

    <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