scroll - 在Android上使TextView可滚动
我在textview中显示文本似乎太长而不适合进入一个屏幕。 我需要让我的TextView可滚动。 我能怎么做那?
这是代码:
final TextView tv = new TextView(this);
tv.setBackgroundResource(R.drawable.splash);
tv.setTypeface(face);
tv.setTextSize(18);
tv.setTextColor(R.color.BROWN);
tv.setGravity(Gravity.CENTER_VERTICAL| Gravity.CENTER_HORIZONTAL);
tv.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent e) {
Random r = new Random();
int i = r.nextInt(101);
if (e.getAction() == e.ACTION_DOWN) {
tv.setText(tips[i]);
tv.setBackgroundResource(R.drawable.inner);
}
return true;
}
});
setContentView(tv);
25个解决方案
1481 votes
实际上您不需要使用yourTextView.setMovementMethod(new ScrollingMovementMethod());。
只需设置
android:scrollbars = "vertical"
布局的xml文件中yourTextView.setMovementMethod(new ScrollingMovementMethod());的属性。
然后使用:
yourTextView.setMovementMethod(new ScrollingMovementMethod());
在你的代码中。
宾果,滚动!
Amit Chintawar answered 2019-01-15T13:39:46Z
279 votes
这就是我纯粹用XML做的方式:
android:orientation="vertical"
android:layout_
android:layout_>
android:id="@+id/SCROLLER_ID"
android:layout_
android:layout_
android:scrollbars="vertical"
android:fillViewport="true">
android:id="@+id/TEXT_STATUS_ID"
android:layout_
android:layout_
android:layout_weight="1.0"/>
笔记:
android:layout_与android:layout_weight="1.0"相结合将使textview占用所有可用空间。
定义Scrollview时,请勿指定android:layout_否则滚动视图不起作用! (这导致我现在浪费了一个小时!FFS)。
专家提示:
要在添加文本后以编程方式滚动到底部,请使用以下命令:
mTextStatus = (TextView) findViewById(R.id.TEXT_STATUS_ID);
mScrollView = (ScrollView) findViewById(R.id.SCROLLER_ID);
private void scrollToBottom()
{
mScrollView.post(new Runnable()
{
public void run()
{
mScrollView.smoothScrollTo(0, mTextStatus.getBottom());
}
});
}
Someone Somewhere answered 2019-01-15T13:40:46Z
119 votes
所有真正必要的是setMovementMethod()。 这是使用LinearLayout的示例。
文件main.xml
android:orientation="vertical"
android:layout_
android:layout_
>
android:id="@+id/tv1"
android:layout_
android:layout_
android:text="@string/hello"
/>
文件WordExtractTest.java
public class WordExtractTest extends Activity {
TextView tv1;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tv1 = (TextView)findViewById(R.id.tv1);
loadDoc();
}
private void loadDoc() {
String s = "";
for(int x=0; x<=100; x++) {
s += "Line: " + String.valueOf(x) + "\n";
}
tv1.setMovementMethod(new ScrollingMovementMethod());
tv1.setText(s);
}
}
EddieB answered 2019-01-15T13:41:22Z
44 votes
让你的textview添加这个
TextView textview= (TextView) findViewById(R.id.your_textview_id);
textview.setMovementMethod(new ScrollingMovementMethod());
matasoy answered 2019-01-15T13:41:45Z
36 votes
没有必要投入
android:Maxlines="AN_INTEGER"`
您只需添加以下内容即可完成工作:
android:scrollbars = "vertical"
并且,将此代码放在Java类中:
textview.setMovementMethod(new ScrollingMovementMethod());
Ahsan Raza answered 2019-01-15T13:42:24Z
26 votes
你也可以
环绕ScrollingMovementMethod.getInstance();由ScrollView; 要么
将Movement方法设置为ScrollingMovementMethod.getInstance();。
Samuh answered 2019-01-15T13:43:01Z
17 votes
我找到的最佳方式:
使用具有以下额外属性的EditText替换TextView:
android:background="@null"
android:editable="false"
android:cursorVisible="false"
不需要在ScrollView中包装。
Valentin Galea answered 2019-01-15T13:43:38Z
13 votes
这是“如何将ScrollBar应用于TextView”,仅使用XML。
首先,您需要在main.xml文件中使用Textview控件并将一些文本写入其中...如下所示:
android:id="@+id/TEXT"
android:layout_
android:layout_
android:text="@string/long_text"/>
接下来,将文本视图控件放在scrollview之间以显示此文本的滚动条:
android:orientation="vertical"
android:layout_
android:layout_>
android:id="@+id/ScrollView01"
android:layout_
android:layout_>
android:id="@+id/TEXT"
android:layout_
android:layout_
android:text="@string/long_text"/>
而已...
mOmO answered 2019-01-15T13:44:22Z
12 votes
简单。 这就是我做的方式:
XML方面:
xmlns:tools="http://schemas.android.com/tools"
android:layout_
android:layout_
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
tools:cOntext="com.mbh.usbcom.MainActivity">
android:id="@+id/tv_log"
android:layout_
android:layout_
android:scrollbars="vertical"
android:text="Log:" />
Java方面:
tv_log = (TextView) findViewById(R.id.tv_log);
tv_log.setMovementMethod(new ScrollingMovementMethod());
奖金:
要让文本视图在文本填充时向下滚动,您必须添加:
android:gravity="bottom"
到TextView xml文件。 随着更多文本的进入,它会自动向下滚动。
当然,您需要使用append函数而不是set text添加文本:
tv_log.append("\n" + text);
我用它来记录日志。
我希望这有帮助 ;)
MBH answered 2019-01-15T13:45:50Z
11 votes
Someone Somewhere上面的“专业提示”(使Android上的TextView可滚动)效果很好,但是,如果你动态地向ScrollView添加文本并希望仅在用户处于附加状态后自动滚动到底部,该怎么办? ScrollView的底部? (也许是因为如果用户已经向上滚动阅读某些内容,您不希望在追加期间自动重置到底部,这会很烦人。)
无论如何,这里是:
if ((mTextStatus.getMeasuredHeight() - mScrollView.getScrollY()) <=
(mScrollView.getHeight() + mTextStatus.getLineHeight())) {
scrollToBottom();
}
如果用户位于ScrollView末尾的一行内,则mTextStatus.getLineHeight()将使它不会scrollToBottom()。
Mark Cramer answered 2019-01-15T13:46:28Z
9 votes
这将提供带滚动条的平滑滚动文本。
ScrollView scroller = new ScrollView(this);
TextView tv = new TextView(this);
tv.setText(R.string.my_text);
scroller.addView(tv);
IT-Dan answered 2019-01-15T13:46:51Z
8 votes
如果要在textview中滚动文本,则可以执行以下操作:
首先,您必须继承textview。
然后使用它。
以下是子类文本视图的示例。
public class AutoScrollableTextView extends TextView {
public AutoScrollableTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
setEllipsize(TruncateAt.MARQUEE);
setMarqueeRepeatLimit(-1);
setSingleLine();
setHorizontallyScrolling(true);
}
public AutoScrollableTextView(Context context, AttributeSet attrs) {
super(context, attrs);
setEllipsize(TruncateAt.MARQUEE);
setMarqueeRepeatLimit(-1);
setSingleLine();
setHorizontallyScrolling(true);
}
public AutoScrollableTextView(Context context) {
super(context);
setEllipsize(TruncateAt.MARQUEE);
setMarqueeRepeatLimit(-1);
setSingleLine();
setHorizontallyScrolling(true);
}
@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中使用它:
android:layout_
android:layout_
android:text="This is very very long text to be scrolled"
/>
而已。
Dipendra answered 2019-01-15T13:47:43Z
6 votes
我没有找到TextView滚动来支持&#39;fling&#39;手势,它在向上或向下滑动后继续滚动。 我最终实现了这一点,因为我不想出于各种原因使用ScrollView,而且似乎没有一个MovementMethod允许我选择文本并点击链接。
android.weasel answered 2019-01-15T13:48:08Z
5 votes
在XML中的textview中添加以下内容。
android:scrollbars="vertical"
最后,添加
textView.setMovementMethod(new ScrollingMovementMethod());
在Java文件中。
user3921740 answered 2019-01-15T13:48:47Z
4 votes
完成可滚动后,在视图中输入任何内容时,将此行添加到视图的最后一行:
((ScrollView) findViewById(R.id.TableScroller)).fullScroll(View.FOCUS_DOWN);
Rahul Baradia answered 2019-01-15T13:49:11Z
4 votes
将其添加到XML布局:
android:ellipsize="marquee"
android:focusable="false"
android:marqueeRepeatLimit="marquee_forever"
android:scrollHorizOntally="true"
android:singleLine="true"
android:text="To Make An textView Scrollable Inside The TextView Using Marquee"
在代码中,您必须编写以下行:
textview.setSelected(true);
textView.setMovementMethod(new ScrollingMovementMethod());
Ritesh answered 2019-01-15T13:49:41Z
3 votes
如果您不想使用EditText解决方案,那么您可能会更幸运:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.yourLayout);
(TextView)findViewById(R.id.yourTextViewId).setMovementMethod(ArrowKeyMovementMethod.getInstance());
}
Justin Buser answered 2019-01-15T13:50:04Z
2 votes
下面的代码创建了一个自动水平滚动textview:
在将TextView添加到xml时使用
android:ellipsize="marquee"
android:scrollHorizOntally="true"/>
在onCreate()中设置TextView的以下属性
tv.setSelected(true);
tv.setHorizontallyScrolling(true);
whitepearl answered 2019-01-15T13:50:39Z
1 votes
像这样使用它
android:layout_
android:layout_
android:maxLines = "AN_INTEGER"
android:scrollbars = "vertical"
/>
Kamil Ibadov answered 2019-01-15T13:50:57Z
0 votes
在我的例子中.Constraint Layout.AS 2.3。
代码实现:
YOUR_TEXTVIEW.setMovementMethod(new ScrollingMovementMethod());
XML:
android:scrollbars="vertical"
android:scrollIndicators="right|end"
Sasha 888 answered 2019-01-15T13:51:34Z
0 votes
我挣扎了一个多星期,终于想出了如何做到这一点!
我的问题是,所有内容都会滚动为“块”。 文本本身是滚动的,但是作为一个块而不是一行一行。 这显然对我不起作用,因为它会切断底部的线条。 所有以前的解决方案都不适合我,所以我自己制作了。
这是迄今为止最简单的解决方案:
在包中创建一个名为“Perfect Scrollable TextView”的类文件,然后将此代码复制并粘贴到:
import android.content.Context;
import android.graphics.Rect;
import android.util.AttributeSet;
import android.widget.TextView;
public class PerfectScrollableTextView extends TextView {
public PerfectScrollableTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
setVerticalScrollBarEnabled(true);
setHorizontallyScrolling(false);
}
public PerfectScrollableTextView(Context context, AttributeSet attrs) {
super(context, attrs);
setVerticalScrollBarEnabled(true);
setHorizontallyScrolling(false);
}
public PerfectScrollableTextView(Context context) {
super(context);
setVerticalScrollBarEnabled(true);
setHorizontallyScrolling(false);
}
@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更改&#39;TextView&#39;:
来自:
致:
Petro answered 2019-01-15T13:52:38Z
0 votes
将maxLines和textView.setMovementMethod(new ScrollingMovementMethod());放在xml中的TextView中。
android:layout_
android:scrollbars="vertical"
android:maxLines="5" // any number of max line here.
/>
然后在java代码中。
textView.setMovementMethod(new ScrollingMovementMethod());
Khemraj answered 2019-01-15T13:53:17Z
0 votes
当我在ScrollView内使用TextView时出现此问题。此解决方案对我有用。
scrollView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
description.getParent().requestDisallowInterceptTouchEvent(false);
return false;
}
});
description.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
description.getParent().requestDisallowInterceptTouchEvent(true);
return false;
}
});
Rohit Mandiwal answered 2019-01-15T13:53:42Z
0 votes
每当您需要将ScrollView用作父级时,您还可以使用带有TextView的滚动移动方法。
而当您纵向设置风景时,时间会出现问题。 (像)整个页面是可滚动的但滚动移动方法不能工作。
如果您仍然需要使用ScrollView作为父级或滚动移动方法,那么您还可以使用下面的desc。
如果您没有任何问题,那么您使用EditText而不是TextView
见下文 :
android:id="@+id/description_text_question"
android:layout_
android:layout_
android:background="@null"
android:editable="false"
android:cursorVisible="false"
android:maxLines="6"/>
这里,EditText的行为类似于TextView
而你的问题将得到解决
user7832102 answered 2019-01-15T13:54:50Z
0 votes
XML - 您可以使用setHorizontallyScrolling(boolean)属性
是否允许文本比视图宽(因此可以水平滚动)。
可以是布尔值,例如“true”或“false”。
Prigramacaly - setHorizontallyScrolling(boolean)
sam answered 2019-01-15T13:55:33Z