需要使TextView自动垂直滚动

时间:2013-11-25 23:08:49

标签: android textview

我正在尝试开发一个活动,该活动将成为大学项目的简单聊天应用程序的一部分。我希望设置一个EditTextButton的设置,按下该EditText时会获取TextView的文本并将其附加到TextView的内容中同样的活动。到目前为止,这对我来说似乎工作正常,但我也希望这样做,以便在onCreate()上发送消息时,如果没有足够的空间显示新的文本行,它将滚动自动关闭。

这就是我在活动中protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); final EditText edit = (EditText) findViewById(R.id.editText1) ; final Button button = (Button) findViewById(R.id.button1) ; final TextView text = (TextView) findViewById(R.id.textView1) ; //text.setMaxHeight(200); text.setSelected(true); text.setMovementMethod(new ScrollingMovementMethod()); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if(edit.getText().length() > 0) { text.append(edit.getText() + "\n") ; edit.setText(""); } } }); } 看起来像

的内容
<TextView
    android:id="@+id/textView1"
    android:ellipsize="marquee"
    android:focusable="false"
    android:marqueeRepeatLimit="marquee_forever"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="70dp"
    android:text=""
    android:scrollbars ="vertical"
    android:maxLines="10" />

这是Activity的XML布局文件的相关部分。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >

<Button
    android:id="@+id/button1"
    style="?android:attr/buttonStyleSmall"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignBaseline="@+id/editText1"
    android:layout_alignBottom="@+id/editText1"
    android:layout_alignParentRight="true"
    android:text="@string/okString" />

<EditText
    android:id="@+id/editText1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_marginBottom="107dp"
    android:layout_toLeftOf="@+id/button1"
    android:ems="10" />

<ScrollView
    android:id="@+id/scrollView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true" >

    <TextView
            android:id="@+id/textView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="70dp"
            android:ellipsize="marquee"
            android:focusable="false"
            android:marqueeRepeatLimit="marquee_forever"
            android:maxLines="10"
            android:scrollbars="vertical"
            android:text="     " />
</ScrollView>

我做错了什么?或者我是误解,是文本视图我不想要的东西吗?

编辑:完整的XML文件

{{1}}

3 个答案:

答案 0 :(得分:2)

            String text="Im trying to develop an activity that will be part of a simple chat application for a college project. I want to have a setup where I have an EditText and a Button which when pressed takes the  "
            mText = (TextView) findViewById(R.id.textView1);
            mText.setText(text)
    mText.setMovementMethod(new ScrollingMovementMethod())

XML

    <ScrollView android:layout_width="fill_parent" android:layout_height="fill_parent">
<TextView
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textColor="@android:color/black"
    android:text="                       
                    " />

注意: Instead of storing your text as normal string save it in HTML format which will add line break in your text.

 String text="Im trying to develop an activity that will<br> be part of a simple chat <br>application for a college project. I want to have a setup where I have an EditText and <br>a Button which when pressed takes the  "

然后将此行添加到上面的代码

 mText.setText(Html.fromHtml(text));

这将返回更正确的结果

答案 1 :(得分:1)

假设您已在xml文件中插入了结束标记</RelativeLayout>,我尝试了您的代码,并且它在我的结束时工作正常。请尝试清理项目并从

重新重建
Project -> Clean
Project -> Build Project
编辑:你可以试试这个布局吗?请注意,我已从布局中删除了ScrollView并再次插入了行text.setMovementMethod(new ScrollingMovementMethod());

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" 
android:layout_height="fill_parent">

<TextView 
    android:text="    " 
    android:id="@+id/textView1"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:scrollbars="vertical"
    android:maxLines="10">
</TextView>

<RelativeLayout 
    android:id="@+id/InnerRelativeLayout"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true" >

    <Button 
        android:text="Button1" 
        android:id="@+id/button1"
        android:layout_alignParentRight="true" 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
    </Button>

    <EditText 
        android:id="@+id/editText1" 
        android:layout_width="fill_parent"
        android:layout_toLeftOf="@id/button1"
        android:layout_height="wrap_content">
    </EditText>

</RelativeLayout>

答案 2 :(得分:1)

您不应将垂直可滚动组件放在垂直可滚动的scrollview中,并且因为您的textview是可滚动的,所以我不知道为什么您首先需要scrollview。 然后你可以使用text.setScrollY(text.getLayout()。getHeight())。我不确定它是否会起作用,但如果不能,你可以尝试Get the size of a text in TextView