`

动态更改ScrollView显示聊天内容

阅读更多
直接上代码,以下例子可用于如题所示的功能:
package cn.com;

import java.util.Calendar;
import android.app.Activity;
import android.content.Context;
import android.graphics.Color;
import android.os.Bundle;
import android.os.Handler;
import android.text.format.DateFormat;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.ProgressBar;
import android.widget.ScrollView;
import android.widget.TextView;
import android.view.View.OnClickListener;

public class fetion2009 extends Activity implements OnClickListener {
	// 进度条控件,但拿出来是为了可控,动态改变其进度
	ProgressBar pb;

	// 聊天对话的底色是间隔的
	private static final int[] bg = { Color.WHITE, Color.GRAY };

	// 聊天对话的底色 当前色应该是bg中的索引值
	private static int bgIndex = 0;

	LinearLayout layout;

	ScrollView scroll;

	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);

		setContentView(R.layout.main);

		// 聊天对白窗口需要滚动
		scroll = (ScrollView) findViewById(R.id.scrollview);

		Button inputbutton = (Button) findViewById(R.id.inputbutton);
		inputbutton.setOnClickListener(this);

		// 线性布局方式
		layout = new LinearLayout(this);

		// 控件对其方式为垂直排列
		layout.setOrientation(LinearLayout.VERTICAL);

		// 设置布局板的一个特殊颜色,这可以检验我们会话时候是否有地方颜色不正确!
		layout.setBackgroundColor(0xff00ffff);

		// 丰富聊天页面,也顺带测试页面滚动效果,增加了10个重复的对话内容
		for (int i = 0; i < 15; i++) {
			setMsg(layout, this, getCurrColor(), i + "聊天内容在这里....");
		}

		scroll.addView(layout);

	}

	/**
	 * @return 当前聊天对白的底色值
	 */
	private int getCurrColor() {
		return bg[(++bgIndex) % bg.length];
	}

	/**
	 * 动态增加一个聊天内容 这里为了简化编程把 某人说 和 内容放到一个TextView中,
	 * 可以根据设计文档拆成2个TextView分别显示,设置字体等
	 * 
	 * @param layout
	 *            TextView控件欲添加到的目标layout
	 * @param context
	 *            构建View控件的必须参数 既View控件的环境
	 * @param bgColur
	 *            TextView控件的背景色
	 * @param MSG
	 *            TextView控件要现实的文本内容
	 */
	private void setMsg(LinearLayout layout, Context context, int bgColur,
			String MSG) {
		TextView tv = new TextView(context);
		// 获取一个全局的日历实例,用于获取当前系统时间并格式化成小时:分钟形式,
		// 仅用于测试,这里的时间应该是由其他程序提供
		tv.setText("某人  说: ["
				+ DateFormat.format("kk:mm", Calendar.getInstance()) + "]\n"
				+ MSG);
		tv.setBackgroundColor(bgColur);
		layout.addView(tv);
	}

	private final Handler mHandler = new Handler();

	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
		setMsg(layout, this, getCurrColor(), "聊天内容在这里。。");
		// 投递一个消息进行滚动
		mHandler.post(mScrollToBottom);

	}

	private Runnable mScrollToBottom = new Runnable() {
		@Override
		public void run() {
			// TODO Auto-generated method stub
			Log.d("", "ScrollY: " + scroll.getScrollY());
			int off = layout.getMeasuredHeight() - scroll.getHeight();
			if (off > 0) {
				scroll.scrollTo(0, off);
			}
		}
	};

}


2.main.xml文件布局
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:orientation="vertical" android:layout_width="fill_parent"
	android:layout_height="fill_parent" android:background="#c8d8f4">
	<ScrollView android:layout_width="fill_parent" android:id="@+id/scrollview"
		android:layout_height="380dp" android:text="@string/hello"
		android:background="#c8d8f4"></ScrollView>
	<EditText android:layout_width="240dp" android:layout_height="wrap_content"
		android:layout_below="@+id/scrollview" android:id="@+id/inputText" />
	<Button android:layout_width="wrap_content"
		android:layout_height="wrap_content" android:layout_below="@+id/scrollview"
		android:id="@+id/inputbutton" android:layout_marginLeft="260dp"
		android:text="发送" />
</RelativeLayout>


希望对大家有所帮助,也希望各位能留言帮介绍一些学习的地址之类,谢谢先
分享到:
评论

相关推荐

    unity3d游戏开发之聊天窗口

    - 用户可以拖动聊天窗口改变位置或调整窗口大小。 ### 扩展知识点 1. **UI Text List**: - 实现一个自定义的UITextList类来管理聊天记录的显示。 - 可以考虑使用Unity UI的TextMesh Pro组件来优化文本渲染性能。...

    纯代码AutoLayout布局的QQ聊天界面.zip

    总结来说,这个开源项目提供了使用AutoLayout进行复杂界面布局的实例,特别是对于聊天界面这种需要动态适应内容和屏幕尺寸的场景。通过学习和分析,开发者不仅可以掌握AutoLayout的基本用法,还能进一步理解如何在...

    android控件动态使用_动态控件创建

    为了使聊天界面更加真实,还可以加入更多细节处理,比如动态改变背景颜色、调整控件间距等。 #### 五、总结 动态创建控件是Android开发中一项非常实用的技术,尤其是在需要频繁更新UI的情况下。通过本文介绍的方法...

    iOS UIScrollView的放大功能,类似微信聊天图片

    在UIScrollView内部,我们通常会添加一个子视图(UIImageView或自定义视图),这个子视图可以包含我们要显示的全部内容。当用户触摸并拖动屏幕时,UIScrollView会根据用户的操作改变其contentOffset属性,从而实现...

    Android开发简单的机器人聊天小助手

    通常,这会包含一个输入框用于用户输入消息,一个按钮用于发送消息,以及一个滚动视图来显示聊天历史。在`activity_main.xml`布局文件中,可以使用`EditText`、`Button`和`ScrollView`组件来构建这个界面。记得添加...

    Scroll View

    "Scroll View"是UGUI中的一个核心组件,允许玩家在有限的屏幕空间内查看和操作大量内容,如游戏菜单、角色列表或聊天窗口。本文将深入探讨"Scroll View"的实现及其优化策略,特别是如何实现横线滑动、纵向滑动以及...

    Android 划屏

    划屏技术使得用户可以流畅地浏览和操作应用内容,提升用户体验。下面将详细介绍Android中实现划屏的相关知识点。 1. **布局设计**: 在创建划屏界面时,通常会用到`ScrollView`或`HorizontalScrollView`来实现垂直...

    Android 软键盘处理

    3. **自定义布局处理**:通过监听键盘的显示与隐藏事件,动态修改布局的高度和位置。这通常需要使用到`ViewTreeObserver.OnGlobalLayoutListener`,在键盘状态变化时进行相应的布局调整。 4. **第三方库**:有一些...

    仿微信刷新

    在微信应用中,当你在聊天列表或者朋友圈页面向下拉动时,会看到一个动画效果,通常包含一个旋转的小菊花图标和一些文字提示,如"下拉可以刷新"或"释放立即刷新"。这种设计不仅增添了交互性,也使得用户清楚地知道...

    Android-android弹幕的view

    在Android应用开发中,弹幕效果通常用于视频播放或者聊天室等场景,为用户提供一种动态展示信息的方式。本文将深入探讨如何在Android中实现一个自定义的“弹幕View”。 一、理解弹幕机制 弹幕(Danmaku)源自日本的...

    右侧微信返回顶部

    在微信的日常使用中,"返回顶部"是一个非常实用的功能,尤其对于那些浏览长篇文章或者聊天记录时。这个功能使得用户能够快速地从当前位置回到聊天界面或文章的开头,节省了滑动屏幕的时间,提高了效率。在"右侧微信...

    KeyboardAwareDemo,一、演示.zip

    - **键盘事件监听**:项目通过监听键盘的显示和隐藏事件,来触发界面的动态调整。 - **布局管理**:在Android中,可能涉及到ScrollView、NestedScrollView或 CoordinatorLayout 的使用;在iOS中,可能涉及...

    SoftKeyboardListenDemo.zip_android开发_Java_

    2. 自定义`ScrollView`或`NestedScrollView`:当内容过多时,可以使用自定义的滚动视图监听键盘事件,以便在键盘弹出时自动滚动到输入框位置。 3. 使用第三方库:像`androidx.coordinatorlayout.widget....

    Android--- 微信头和仿天猫浮动按钮

    微信头通常指的是在应用顶部,类似于微信聊天页面顶部的那个滚动条,它可以显示当前页面的标题,并且随着页面的滑动而上下移动,当滑动到顶部时会固定在屏幕顶部。这个功能在Android中可以通过实现ScrollView或...

    Visual C++2010开发权威指南(共三部分).part1.rar

    5.6.3 Rich Edit控件中的当前选定内容 215 5.6.4 Rich Edit控件中的分词 216 5.6.5 Rich Edit控件中的剪贴板操作 216 5.6.6 Rich Edit控件中的流操作 216 5.6.7 Rich Edit控件中的打印操作 216 5.6.8 无底的Rich ...

Global site tag (gtag.js) - Google Analytics