我有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。
我怎么能这样做?
答案 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"/>
这个有效!!!