我需要在TextView
内创建类似滚动ScrollView
...就像可滚动ScrollView
内的1个主TextView
我已将此代码放入RelativeLayout
<ScrollView
android:id="@+id/scrollView1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentLeft="true"
android:layout_below="@+id/img_view_flag"
android:layout_marginTop="17dp"
android:paddingBottom="20dip">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/tv_desc"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/rel_layout"
android:layout_marginTop="15dp"
android:maxLines="7"
android:scrollbars="vertical"
android:text="Medium Text"
android:paddingBottom="10dip"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textColor="@color/black" />
<RelativeLayout
android:id="@+id/rel_layout2"
android:layout_width="match_parent"
android:layout_height="4dp"
android:layout_alignParentLeft="true"
android:layout_below="@+id/tv_desc"
android:background="@color/black" >
</RelativeLayout>
<TextView
android:id="@+id/tv_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/rel_layout2"
android:layout_marginTop="24dp"
android:maxLines="5"
android:scrollbars="vertical"
android:text="Small Text"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textColor="@color/black" />
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/rel_layout2"
android:layout_centerHorizontal="true"
android:text="Title"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="@color/black" />
<RelativeLayout
android:id="@+id/rel_layout3"
android:layout_width="match_parent"
android:layout_height="4dp"
android:layout_alignParentLeft="true"
android:layout_below="@+id/tv_title"
android:background="@color/black" >
</RelativeLayout>
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/rel_layout3"
android:layout_centerHorizontal="true"
android:text="Lyricist"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="@color/black" />
<TextView
android:id="@+id/tv_l"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/textView2"
android:text="Small Text"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textColor="@color/black" />
<RelativeLayout
android:id="@+id/rel_layout4"
android:layout_width="match_parent"
android:layout_height="4dp"
android:layout_alignParentLeft="true"
android:layout_below="@+id/tv_l"
android:background="@color/black" >
</RelativeLayout>
<TextView
android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/textView2"
android:layout_below="@+id/rel_layout4"
android:text="Composer"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="@color/black" />
<TextView
android:id="@+id/tv_composer"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/textView3"
android:text="Small Text"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textColor="@color/black" />
<RelativeLayout
android:id="@+id/rel_layout5"
android:layout_width="match_parent"
android:layout_height="4dp"
android:layout_alignParentLeft="true"
android:layout_below="@+id/tv_composer"
android:background="@color/black" >
</RelativeLayout>
<TextView
android:id="@+id/textView4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/textView3"
android:layout_below="@+id/rel_layout5"
android:text="Adopted"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="@color/black" />
<TextView
android:id="@+id/tv_adopted"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/textView4"
android:text="Small Text"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textColor="@color/black" />
<RelativeLayout
android:id="@+id/rel_layout6"
android:layout_width="match_parent"
android:layout_height="4dp"
android:layout_alignParentLeft="true"
android:layout_below="@+id/tv_adopted"
android:background="@color/black" >
</RelativeLayout>
<TextView
android:id="@+id/textView5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Lyrics"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="@color/black" />
<TextView
android:id="@+id/tv_lyri"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/textView5"
android:maxLines="10"
android:scrollbars="vertical"
android:text="Small Text"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textColor="@color/black" />
</LinearLayout>
</ScrollView>
但不适合我.... 主滚动条工作
答案 0 :(得分:20)
这个问题有点复杂,我没有足够的时间来解释,但你可以通过在onCreat类或onCreatView类的末尾添加这些onTouch类来轻松摆脱它(如果你使用的是片段)。
scrollview1.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
tv_desc.getParent().requestDisallowInterceptTouchEvent(false);
return false;
}
});
tv_desc.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
tv_desc.getParent().requestDisallowInterceptTouchEvent(true);
return false;
}
});
以及其他文字视图。
答案 1 :(得分:8)
只需设置
即可android:maxLines = "AN_INTEGER"
android:scrollbars = "vertical"
布局的xml文件中TextView的属性。
然后使用:
tv_desc.setMovementMethod(new ScrollingMovementMethod());
scrollview.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
tv_desc.getParent().requestDisallowInterceptTouchEvent(false);
return false;
}
});
tv_desc.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
tv_desc.getParent().requestDisallowInterceptTouchEvent(true);
return false;
}
});
希望它能运作
答案 2 :(得分:3)
实际上,使TextView / EditText在ScrollView中滚动的唯一方法(对我有用)是
public class Utils {
public static void enableScroll(View view) {
if (view instanceof TextView) {
TextView textView = (TextView) view;
textView.setMovementMethod(new ScrollingMovementMethod());
}
view.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
v.getParent().requestDisallowInterceptTouchEvent(true);
switch (event.getAction() & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_UP:
v.getParent().requestDisallowInterceptTouchEvent(false);
break;
}
return false;
}
});
}
}
使用
<TextView
android:id="@+id/textView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scrollbars="vertical" />
(无需设置android:maxLines
属性)
使用
TextView textView = findViewById(R.id.textView);
Utils.enableScroll(textView);
答案 3 :(得分:1)
您还可以简单地向textView添加一点高程。
<TextView
android:id="@+id/tv_composer"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:elevation="1dp"
android:layout_below="@+id/textView3"
android:text="Small Text"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textColor="@color/black" />
这对我有用。 :)
答案 4 :(得分:1)
首先,设置android:scrollbars="vertical"
:
<AppCompatTextView
android:id="@+id/actv"
...
android:scrollbars="vertical" />
此外,添加此扩展功能:
/**
* If this [AppCompatTextView] is placed inside ScrollView then we allow it get scrolled inside
* that ScrollView
*/
fun AppCompatTextView.makeScrollableInsideScrollView() {
movementMethod = ScrollingMovementMethod()
setOnTouchListener { v, event ->
v.parent.requestDisallowInterceptTouchEvent(true)
when (event.action and MotionEvent.ACTION_MASK) {
MotionEvent.ACTION_UP -> {
v.parent.requestDisallowInterceptTouchEvent(false)
//It is required to call performClick() in onTouch event.
performClick()
}
}
false
}
然后致电:
actv.makeScrollableInsideScrollView()