热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

androidtextview多行滚动,scroll在Android上使TextView可滚动

scroll-在Android上使TextView可滚动我在textview中显示文本似乎太长而不适合进入一个屏幕。我需要让我的TextView可滚动。我能怎么做那?

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



推荐阅读
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 本文讲述了如何通过代码在Android中更改Recycler视图项的背景颜色。通过在onBindViewHolder方法中设置条件判断,可以实现根据条件改变背景颜色的效果。同时,还介绍了如何修改底部边框颜色以及提供了RecyclerView Fragment layout.xml和项目布局文件的示例代码。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • 本文介绍了使用PHP实现断点续传乱序合并文件的方法和源码。由于网络原因,文件需要分割成多个部分发送,因此无法按顺序接收。文章中提供了merge2.php的源码,通过使用shuffle函数打乱文件读取顺序,实现了乱序合并文件的功能。同时,还介绍了filesize、glob、unlink、fopen等相关函数的使用。阅读本文可以了解如何使用PHP实现断点续传乱序合并文件的具体步骤。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
  • Java中包装类的设计原因以及操作方法
    本文主要介绍了Java中设计包装类的原因以及操作方法。在Java中,除了对象类型,还有八大基本类型,为了将基本类型转换成对象,Java引入了包装类。文章通过介绍包装类的定义和实现,解答了为什么需要包装类的问题,并提供了简单易用的操作方法。通过本文的学习,读者可以更好地理解和应用Java中的包装类。 ... [详细]
  • PDO MySQL
    PDOMySQL如果文章有成千上万篇,该怎样保存?数据保存有多种方式,比如单机文件、单机数据库(SQLite)、网络数据库(MySQL、MariaDB)等等。根据项目来选择,做We ... [详细]
  • Week04面向对象设计与继承学习总结及作业要求
    本文总结了Week04面向对象设计与继承的重要知识点,包括对象、类、封装性、静态属性、静态方法、重载、继承和多态等。同时,还介绍了私有构造函数在类外部无法被调用、static不能访问非静态属性以及该类实例可以共享类里的static属性等内容。此外,还提到了作业要求,包括讲述一个在网上商城购物或在班级博客进行学习的故事,并使用Markdown的加粗标记和语句块标记标注关键名词和动词。最后,还提到了参考资料中关于UML类图如何绘制的范例。 ... [详细]
  • 本文介绍了如何使用jQuery和AJAX来实现动态更新两个div的方法。通过调用PHP文件并返回JSON字符串,可以将不同的文本分别插入到两个div中,从而实现页面的动态更新。 ... [详细]
  • 本文详细介绍了Android中的坐标系以及与View相关的方法。首先介绍了Android坐标系和视图坐标系的概念,并通过图示进行了解释。接着提到了View的大小可以超过手机屏幕,并且只有在手机屏幕内才能看到。最后,作者表示将在后续文章中继续探讨与View相关的内容。 ... [详细]
  • python3 logging
    python3logginghttps:docs.python.org3.5librarylogging.html,先3.5是因为我当前的python版本是3.5之所 ... [详细]
  • 本文详细介绍了MysqlDump和mysqldump进行全库备份的相关知识,包括备份命令的使用方法、my.cnf配置文件的设置、binlog日志的位置指定、增量恢复的方式以及适用于innodb引擎和myisam引擎的备份方法。对于需要进行数据库备份的用户来说,本文提供了一些有价值的参考内容。 ... [详细]
author-avatar
FC青春一路有你
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有