Android聊天室或者文字直播间效果,附带TextView滚动到最下边和实时追加字符串方法

聊天室窗口的高度室固定的,新的文字消息总是加入窗口末尾,同时窗口内部的文本整体向上滚动,窗口的大小,位置保持不变。

1.聊天室用到的属性与方法说明

XML中的属性聊天室用到的设置方法说明
gravitysetGravity指定文本的对齐方式,取值left|bottom,表示靠左对齐且靠下对齐
linessetLines指定文本的行数
maxLinessetMaxLines指定文本的最大行数
scrollbars指定滚动条的方向,取值Vertical,如果不指定将不显示滚动条
setMovementMethod设置文本的移动方式,可设置ScrollingMovementMethod,如果不设置将无法拉动文本

2.聊天室风格TextView举例

布局文件

<?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="match_parent"
    android:orientation="vertical">

    <TextView
        android:id="@+id/tv"
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:gravity="left|bottom"
        android:layout_marginTop="100dp"
        android:lines="8"
        android:maxLines="8"
        android:scrollbars="vertical"/>

    <Button
        android:id="@+id/bt"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="添加文字"/>
</LinearLayout>

java代码中

public class MainActivity extends AppCompatActivity {

    private TextView tv;
    private Button bt;
    private SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tv = findViewById(R.id.tv);
        bt = findViewById(R.id.bt);
        tv.setMovementMethod(new ScrollingMovementMethod());
        bt.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                tv.append("\n哈哈哈 "+simpleDateFormat.format(System.currentTimeMillis()));
                int scrollAmount = tv.getLayout().getLineTop(tv.getLineCount())
                        - tv.getHeight();
                if (scrollAmount > 0) {
                    tv.scrollTo(0, scrollAmount);
                }else {
                    tv.scrollTo(0, 0);
                }
            }
        });
    }
}

这样每次按动一下按钮就会增加一条内容进入TextView中,并自动滚动到最底部。我们同样也可以手动拖动查看之前的内容。

这种风格做聊天室可能不太合理了,因为聊天室每条内容都是有头像,文字还有他们自己的样式。我认为可能两种情况使用比较合理,一种是日志实时记录显示;一种是直播的简单留言板。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值