在RecyclerView中滚动Textview

时间:2016-08-03 11:03:58

标签: android android-layout android-recyclerview

我有RecyclerView

<android.support.v7.widget.RecyclerView
            android:id="@+id/activityRecicler"
            android:layout_width="match_parent"
            android:scrollbars="vertical"
            android:layout_height="wrap_content"
            app:stackFromEnd="true"
            />

我有一个行布局:

<LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        >
    <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/description"/>

    <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/solutions"/>

    </LinearLayout>

并且包装内容有效,但我的问题是带有id描述的TextView它可能会很长,因此,我会为此TextView创建一个Scroll。 我怎么能这样做?

6 个答案:

答案 0 :(得分:10)

将布局XML更改为:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <ScrollView
        android:id="@+id/childScroll"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <TextView
            android:id="@+id/description"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    </ScrollView>

    <TextView
        android:id="@+id/solutions"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</LinearLayout>

然后在你的活动中:

activityRecicler.setOnTouchListener(new View.OnTouchListener() {

    public boolean onTouch(View v, MotionEvent event) {
        findViewById(R.id.childScroll).getParent().requestDisallowInterceptTouchEvent(false);
        return false;
    }
});
childScroll.setOnTouchListener(new View.OnTouchListener() {

    public boolean onTouch(View v, MotionEvent event) {
        // Disallow the touch request for parent scroll on touch of child view
        v.getParent().requestDisallowInterceptTouchEvent(true);
        return false;
    }
});

答案 1 :(得分:7)

我是Android的初学者,所以我不知道我的解决方案是否合适。 我按照@Payal

的建议放入布局行
<ScrollView
        android:id="@+id/childScroll"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <TextView
            android:id="@+id/solutions"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:text="long_text"
            android:maxLines="5"
            android:scrollbars="vertical"/>
    </ScrollView>

在我的 ViewHolder

public ViewHolder(View itemView) {
            super(itemView);
            solutions = (TextView) itemView.findViewById(R.id.solutions);
            description = (TextView) itemView.findViewById(R.id.description);
            scrollable = (ScrollView) itemView.findViewById(R.id.childScroll);


            solutions.setOnTouchListener(new View.OnTouchListener() {

                public boolean onTouch(View v, MotionEvent event) {
                    // Disallow the touch request for parent scroll on touch of child view
                    v.getParent().requestDisallowInterceptTouchEvent(true);
                    return false;
                }
            });

//Enabling scrolling on TextView.

            solutions.setMovementMethod(new ScrollingMovementMethod());
        }

这是有效的。 我可以在RecyclerView中滚动TextView

答案 2 :(得分:2)

在viewholder中的textview id上尝试以下代码。

 scrollable = (TextView)findViewById(R.id.textView1);  
//Enabling scrolling on TextView.
 scrollable.setMovementMethod(new ScrollingMovementMethod());

添加TextView 布局

android:scrollbars="vertical"

答案 3 :(得分:0)

你可以将它包装在scrollview这样的

<ScrollView 
    android:layout_height="100px" 
    android:layout_width="fill_parent"> 
    <TextView 
        android:id="@+id/text_view" 
        android:layout_height="wrap_content" 
        android:layout_width="wrap_content" 
        android:text="long_text"/>
</ScrollView>

将这两个属性添加到textview

android:maxLines="5"
android:scrollbars="vertical"

并在代码中添加以下行

textview.setMovementMethod(new ScrollingMovementMethod());

希望这有助于:)

答案 4 :(得分:0)

rowlayout.xml

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    >
<TextView
        android:id="@+id/description"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:ellipsize="marquee"
        android:fadingEdge="horizontal"
        android:lines="1"
        android:marqueeRepeatLimit="marquee_forever"
        android:scrollHorizontally="true"
        android:singleLine="true"
        android:textColor="#ff4500" />
<TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/solutions"/>
</LenearLayout>

和活动

descrptionTextview.setSelected(true);

答案 5 :(得分:0)

制作新课程

public class AutoScrollingTextView extends TextView {

    public AutoScrollingTextView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

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

    public AutoScrollingTextView(Context context) {
        super(context);
    }

    @Override
    protected void onFocusChanged(boolean focused, int direction, Rect     previouslyFocusedRect) {
        if (focused) {
        super.onFocusChanged(focused, direction, previouslyFocusedRect);
    }
    }

    @Override
    public void onWindowFocusChanged(boolean focused) {
        if (focused) {
            super.onWindowFocusChanged(focused);
        }
    }

    @Override
    public boolean isFocused() {
        return true;
    }
}

然后在xml中

<AutoScrollingTextView
    android:scrollHorizontally="true"
    android:ellipsize="marquee"
    android:marqueeRepeatLimit="marquee_forever"/>

这个有效!!!