精华内容
下载资源
问答
  • 聊天界面实现源码,主要还是RecyclerView的练习,熟悉一下流程。【内附智障机器人】
  • Android实现聊天界面

    2021-01-04 01:25:51
    本文实例为大家分享了Android实现聊天界面的具体代码,供大家参考,具体内容如下 文件目录 在app下的build.gradle中添加依赖库(RecyclerView) apply plugin: 'com.android.application' android { ...
  • 自定义聊天界面 下面是demo的效果 我的博客有简单的介绍:
  • 一个实现了聊天界面Android
  • 一个聊天界面,包括从网络下载大表情并发,图片发送,文字发送,Emoji表情发送,自定义表情键盘,Emoji表情键盘,仿QQ功能键盘等等…… 8月1日更新:每个表情符号表情页的最后添加删除图标。 8月5日更新:支持聊天...
  • 在写聊天界面时遇到了一个问题,就是当软键盘弹出时,底部的输入框上移,聊天界面没有跟着上移结果挡住了聊天内容。找了很多方法都是把底部EditView和聊天的Listview放在ScrollView里,但是这样不能固定输入框一直在...

           在写聊天界面时遇到了一个问题,就是当软键盘弹出时,底部的输入框上移,聊天界面没有跟着上移结果挡住了聊天内容。找了很多方法都是把底部EditView和聊天的Listview放在ScrollView里,但是这样不能固定输入框一直在底部。

           最后找到了解决方法其实很简单,只需要在ListView的布局文件中添加:android:transcriptMode="alwaysScroll" 即可。

            <ListView
                android:layout_width="match_parent"
                android:layout_height="0dp"
                android:layout_weight="1"
                android:divider="@null"
                android:paddingBottom="10dp"
                android:transcriptMode="alwaysScroll" />
           android:transcriptMode="alwaysScroll" 表示内容满屏时,自动滚动到ListView的最后一行。
    实现效果:

               

    展开全文
  • Android仿微信聊天界面,解决软键盘抬升的小Demo。同时也有包含两张聊天气泡图。对应介绍博客[](https://blog.csdn.net/Allen_Adolph/article/details/106467315)。大家可以看看。谢谢支持!
  • Android聊天界面实现方式

    万次阅读 热门讨论 2016-05-19 23:49:58
    最近心血来潮,打算实现一个很久之前就想实现的一个界面,就是聊天界面,当时觉得好高大上啊,完全不会啊,不过最近不小心找到了方法。效果图 本来是想上传一张动态图的,但是不知道怎么回事,半天传不上去,只好...

    最近心血来潮,打算实现一个很久之前就想实现的一个界面,就是聊天界面,当时觉得好高大上啊,完全不会啊,不过最近不小心找到了方法。

    效果图

    这里写图片描述
    本来是想上传一张动态图的,但是不知道怎么回事,半天传不上去,只好上传一张静态图了。

    效果解析:在底部输入框里面输入文字信息,点击左边的按钮,就会是左边的消息发布,
    点击右边的按钮,就是右边发的消息,当消息发布出去以后,新的消息会出现的最下面
    

    实现方式

    其实实现原理很简单,真不知道当初我为什么没有想到。
    首先需要知道的是,这个界面是用的什么布局,布局确定好了,基本就成功一半了,因为在代码部分的代码真的很少很简单。
    首先是主界面,好吧,其实也就一个界面,消息显示的区域主要是用的listview,下面2个按钮一个输入框就很好实现了。

    布局文件:activity_main.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout 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:orientation="vertical"
        tools:context=".activity.MainActivity">
    
        <ListView
            android:divider="@null"
            android:id="@+id/listview"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"></ListView>
    
        <TextView
            android:layout_width="match_parent"
            android:layout_height="1dp"
            android:background="#898989" />
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center_vertical"
            android:orientation="horizontal">
    
            <Button
                android:id="@+id/btn_left"
                android:layout_width="wrap_content"
                android:layout_height="30dp"
                android:layout_margin="5dp"
                android:background="@drawable/btn_float"
                android:text="左边"
                android:textColor="#fff" />
    
            <EditText
                android:id="@+id/et_meg"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1" />
    
            <Button
                android:id="@+id/btn_right"
                android:layout_width="wrap_content"
                android:layout_height="30dp"
                android:layout_margin="5dp"
                android:background="@drawable/btn_float"
                android:text="右边"
                android:textColor="#fff" />
    
        </LinearLayout>
    
    
    </LinearLayout>
    

    这样就能实现主界面的布局。
    之后就是listview的item布局,刚开始还不知道怎么写,而且还遇到了一些小问题,不过这些小问题,后来都解决了
    布局文件:item.xml

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    
        <LinearLayout
            android:id="@+id/left"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="horizontal">
    
            <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:orientation="vertical">
    
                <ImageView
                    android:layout_width="50dp"
                    android:layout_height="50dp"
                    android:src="@drawable/boy" />
    
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center"
                    android:layout_marginTop="5dp"
                    android:text="鸣人" />
    
            </LinearLayout>
    
    
            <TextView
                android:id="@+id/text_left"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="20dp"
                android:background="@drawable/left"
                android:text="" />
    
    
        </LinearLayout>
    
        <LinearLayout
            android:id="@+id/right"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:orientation="horizontal">
    
            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_weight="1" />
    
    
            <TextView
                android:id="@+id/text_right"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="10dp"
                android:background="@drawable/right"
                android:text="" />
    
            <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:orientation="vertical">
    
                <ImageView
                    android:layout_width="50dp"
                    android:layout_height="50dp"
                    android:src="@drawable/girl" />
    
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center"
                    android:text="静香" />
    
            </LinearLayout>
    
    
        </LinearLayout>
    
    
    </RelativeLayout>
    

    布局文件有点长,直接给张图片看清楚,相信你一定可以根据图片写出相应的布局。
    这里写图片描述

    解析:将一个文字域和一个头像放在一个线性布局中,创建两个线性布局,一个在左一个在右,注意,此时这两个线性布局都是在同一行
    

    既然是listview,当然少不了实体类和adapter
    首先来实体类:MsgInfo
    其实这个类只有两个数据,一个是左边的消息,一个是右边的消息

    	private String left_text;
        private String right_text;
    

    用get和set方法封装一下就好了。
    记得别忘了构造方法:

    	public MsgInfo(String left_text, String right_text) {
            this.left_text = left_text;
            this.right_text = right_text;
        }
    

    接下来是adapter,我们重写一个adapter继承BaseAdapter类

    public class ListviewAdapter extends BaseAdapter {
    
        private Context context;
        private List<MsgInfo> datas = new ArrayList<>();
    
        private ViewHolder viewHolder;
        
    	//给adapter添加数据
        public void addDataToAdapter(MsgInfo e) {
            datas.add(e);
        }
    
        public ListviewAdapter(Context context) {
            this.context = context;
        }
    
        @Override
        public int getCount() {
            return datas.size();
        }
    
        @Override
        public Object getItem(int position) {
            return datas.get(position);
        }
    
        @Override
        public long getItemId(int position) {
            return position;
        }
        
    	//使用viewholder来优化listview
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
    
            if (convertView == null) {
    
                LayoutInflater inflater = LayoutInflater.from(context);
                convertView = inflater.inflate(R.layout.item, null);
                viewHolder = new ViewHolder(convertView);
    
                convertView.setTag(viewHolder);
    
            } else {
                viewHolder = (ViewHolder) convertView.getTag();
            }
            
    		//获取adapter中的数据
            String left = datas.get(position).getLeft_text();
            String right = datas.get(position).getRight_text();
    		
    		//如果数据为空,则将数据设置给右边,同时显示右边,隐藏左边
            if (left == null) {
                viewHolder.text_right.setText(right);
                viewHolder.right.setVisibility(View.VISIBLE);
                viewHolder.left.setVisibility(View.INVISIBLE);
            }
    
    		//与上一步相反
            if (right == null) {
                viewHolder.text_left.setText(left);
                viewHolder.left.setVisibility(View.VISIBLE);
                viewHolder.right.setVisibility(View.INVISIBLE);
            }
    
            return convertView;
    
        }
    
        public static class ViewHolder {
            public View rootView;
            public TextView text_left;
            public LinearLayout left;
            public TextView text_right;
            public LinearLayout right;
    
            public ViewHolder(View rootView) {
                this.rootView = rootView;
                this.text_left = (TextView) rootView.findViewById(R.id.text_left);
                this.left = (LinearLayout) rootView.findViewById(R.id.left);
                this.text_right = (TextView) rootView.findViewById(R.id.text_right);
                this.right = (LinearLayout) rootView.findViewById(R.id.right);
            }
    
        }
    }
    

    文件名:MainActivity
    各种绑定控件之后,给两个按钮设置监听事件:

    Override
        public void onClick(View v) {
    
            String msg = et_meg.getText().toString().trim();
    
            switch (v.getId()) {
                case R.id.btn_left:
                    adapter.addDataToAdapter(new MsgInfo(msg,null));
                    adapter.notifyDataSetChanged();
                    break;
                case R.id.btn_right:
                    adapter.addDataToAdapter(new MsgInfo(null, msg));
                    adapter.notifyDataSetChanged();
                    break;
            }
    
            listview.smoothScrollToPosition(listview.getCount() - 1);
    
            et_meg.setText("");
    
        }
    

    大功告成!接下来就开始享受鸣人和静香的跨次元交流之旅吧(^ _ ^!)

    注:item布局中的textview的背景图片为点9图片。

    源码下载:http://download.csdn.net/detail/it_xf/9525707

    展开全文
  • android高仿微信聊天界面,语音,表情,拍照及本地图片选择功能 android高仿微信聊天界面,语音,表情,拍照及本地图片选择功能
  • implementation 'androidx.recyclerview:recyclerview:1.0.0' 在drawable里新建几个drawable resource file buttonbackground dialog_left dialog_right inputbackground  用到的颜色 #12de20 #12de...
  • Android制作QQ聊天界面

    2019-12-11 11:11:41
    Android制作的QQ即时聊天界面源码,展示了QQ聊天界面,和通讯录界面,实现了双人及多人聊天的功能,不含服务器!
  • 项目中做了个聊天界面,就一个界面懒得扒框架,顺手撸了。 最后被提了个Bug,弹出输入法键盘挡住了一部分聊天记录,如下 看了微信就不会这样,寻思是不是改改布局就可以。 结果,一直以为是动态改变...

    项目中做了个聊天界面,就一个界面懒得扒框架,顺手撸了。

    最后被提了个Bug,弹出输入法键盘挡住了一部分聊天记录,如下


    看了微信就不会这样,寻思是不是改改布局就可以。

    结果,一直以为是动态改变recyclerview的高度,配合布局,把recyclerview顶上去。

    各种尝试都不行,最后才明白,监听软键盘弹出,来改变recyclerview滚动到最后一个item,吐血。

    代码实现是根布局添加布局改变监听器


    在方法里判断软键盘弹出,然后把recyclerview滚动


    就是这么简单,从一开始想错了,才拧巴这么久。汗

    展开全文
  • Android--仿微信聊天界面
  • Android 仿微信聊天界面
  • 动态显示聊天图片,聊天记录里的聊天图片可动
  • Android 聊天界面对话

    千次阅读 2017-08-23 20:07:44
    实现Android 聊天界面对话 ,可以设计成接受到的消息在左显示,发送的消息右边显示。使用RecyclerView实现,主要思路是:在子项布局中同时设置左边和右边的TextView,选择性的让TextView可见或不可见。源码见github:...

    转载请注明出处:http://blog.csdn.net/htwhtw123/article/details/77510010
    实现Android 聊天界面对话 ,可以设计成接受到的消息在左显示,发送的消息右边显示。使用RecyclerView实现,主要思路是:在子项布局中同时设置左边和右边的TextView,选择性的让TextView可见或不可见。源码见github:点击跳转。下面是在 Androidd 8.0模拟器运行的效果。
    这里写图片描述
    1.导入RecyclerView:
    ctr+al+shift+s:打开Project Structure对话框,点击Dependencies标签->点击右边的加号->点击libray dependence->在搜索框输入recyclerview->回车->双击选中下图所示项

    这里写图片描述
    这里写图片描述

    2.添加图片,设置图片的拉伸方式:自己找一个一个对话框图片->复制到drawable目录下->右击图片文件->create 9 patch file …->弄成如下的样子->把原图片删除。左右各一个,可以在选择图片时,将图片水平旋转,就有了对称的另一张图。例如下面的communicate_left.9.png

    这里写图片描述

    3.设置RecyclerVeiw的子布局:
    item_layout.xml中的代码:

    <?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="wrap_content"
        android:layout_marginTop="20dp"
        android:orientation="vertical">
    
        <TextView
            android:id="@+id/leftTv"
            android:textSize="25sp"
            android:text="左边发出:\n右边你好"
            android:paddingRight="5dp"
            android:paddingLeft="10dp"
            android:paddingTop="5dp"
            android:paddingBottom="5dp"
            android:background="@drawable/communicate_left"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>
    
        <TextView
            android:id="@+id/rightTv"
    
            android:text="右边发出:\n左边你好"
            android:paddingRight="10dp"
            android:paddingLeft="5dp"
            android:paddingTop="5dp"
            android:paddingBottom="5dp"
            android:background="@drawable/communicate_right"
            android:textSize="25sp"
            android:gravity="right"
            android:layout_marginRight="2dp"
            android:layout_width="wrap_content"
            android:layout_gravity="right"
            android:layout_height="wrap_content"/>
    
    </LinearLayout>

    4.ItemAdpter适配器代码:

    package com.xingyi.chatui;
    
    import android.content.Context;
    import android.support.v7.widget.RecyclerView;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.TextView;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class ItemAdapter extends RecyclerView.Adapter<ItemAdapter.MyViewHolder> {
    
    
        List<String> list;
        Context context;
        int leftOrRight;
    
    
        public ItemAdapter( Context context) {
            this.context = context;
            list=new ArrayList<>();
        }
    
    
        @Override
        public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    
            MyViewHolder holder = new MyViewHolder(LayoutInflater.from(
                    context).inflate(R.layout.item_layout, parent,
                    false));
            return holder;
        }
    
        @Override
        public void onBindViewHolder(MyViewHolder holder,  int position) {
            if(leftOrRight==MainActivity.LEFT){
                holder.tvLeft.setVisibility(View.VISIBLE);
                holder.tvRight.setVisibility(View.GONE);
                holder.tvLeft.setText(list.get(position));
            }else if(leftOrRight==MainActivity.RIGHT){
                holder.tvLeft.setVisibility(View.GONE);
                holder.tvRight.setVisibility(View.VISIBLE);
                holder.tvRight.setText(list.get(position));
            }
        }
    
        //添加子项
        public void addItem(String str,int leftOrRight) {
            this.leftOrRight=leftOrRight;
            list.add(str);
            notifyItemInserted(list.size()-1);
        }
    
    
    
    
        @Override
        public int getItemCount() {
            return list.size();
        }
    
        class MyViewHolder extends RecyclerView.ViewHolder {
            TextView tvLeft,tvRight;
    
            public MyViewHolder(View itemView) {
                super(itemView);
                tvLeft = (TextView) itemView.findViewById(R.id.leftTv);
                tvRight = (TextView) itemView.findViewById(R.id.rightTv);
    
            }
        }
    }

    5.主活动的布局activity_main:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
        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"
        tools:context="com.xingyi.test.MainActivity"
        android:orientation="vertical">
    
        <LinearLayout
            android:gravity="center"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
            <Button
                android:onClick="leftClick"
                android:text="左边发送"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"/>
            <Button
    
                android:onClick="rightClick"
                android:layout_marginLeft="29dp"
                android:text="右边发送"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"/>
        </LinearLayout>
    
        <android.support.v7.widget.RecyclerView
            android:id="@+id/rv"
            android:layout_width="match_parent"
            android:layout_height="match_parent"/>
    
    </LinearLayout>
    

    6.MainActivity
    这里需要注意的是,Recyclerview的导入语句,选择:
    import android.support.v7.widget.RecyclerView;

    package com.xingyi.chatui;
    
    import android.os.Bundle;
    import android.support.v7.app.AppCompatActivity;
    import android.support.v7.widget.LinearLayoutManager;
    import android.support.v7.widget.RecyclerView;
    import android.view.View;
    
    public class MainActivity extends AppCompatActivity {
    
        RecyclerView recyclerView;
        ItemAdapter itemAdapter;
        final  static int LEFT=1;
        final  static int RIGHT=2;
        int i=0;
    
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            initView();
        }
    
        private void initView(){
            recyclerView= (RecyclerView) findViewById(R.id.rv);
            recyclerView.setLayoutManager(new LinearLayoutManager(this));
            itemAdapter=new ItemAdapter(this);
            recyclerView.setAdapter(itemAdapter);
        }
    
        public void leftClick(View v){
            //第一个参数指定发出内容,第二参数指定发出的是左还是右
            itemAdapter.addItem("左边发出:\n右边你好"+i,LEFT);
            recyclerView.smoothScrollToPosition(i);//移动到指定位置
            i++;
        }
    
        public void rightClick(View v){
            //第一个参数指定发出内容,第二参数指定发出的是左还是右
            itemAdapter.addItem("右边发出:\n左边你好"+i,RIGHT);
            recyclerView.smoothScrollToPosition(i);//移动到指定位置
            i++;
        }
    
    
    }
    
    展开全文
  • Android模仿聊天对话界面功能实现,类似短信对话与即时通讯对话
  • Android实现聊天界面  更新时间:2018年06月13日 14:14:05   作者:Thierryxc   这篇文章主要为大家详细介绍了Android实现聊天界面的方法,具有一定的参考价值,感兴趣的小伙伴...
  • IM即时通信之聊天界面UI框架,仅前端界面ui,可以发送和接收表情,可以发送语音
  • 对于初学者比较实用,修改了表情对编辑框的自适应,同时修改了一些小问题,可以通过复制消息框,在编辑框粘贴时显示表情;
  • Android 聊天界面,实现Emoji表情、图片、链接高亮、失败重发 源码
  • android高仿微信聊天界面,包含登陆,摇一摇,发信息等多个界面
  • Android键盘面板冲突 布局闪动处理方案(聊天界面键盘冲突),解决切换冲突、解决全屏切换冲突
  • 主要为大家详细介绍了android Listview模拟聊天界面的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 做IM编辑聊天界面时,当点击输入框弹出软键盘时,只有聊天内容随之上移并显示最后一条消息。 如图所示 问题 当点击输入框弹出软键盘后,键盘会遮挡住RecyclerView的部分内容。 如图所示 解决方法 设置...
  • Android 仿QQ聊天界面

    2020-10-03 05:46:08
    Android 仿QQ聊天界面
  • 最近公司需要做IM,所有也找了不少资料,下载了一些开源项目来研究,所以给自己做一下笔记。
  • Android高仿qq聊天界面,发送表情,添加本地图库照片,可拍照
  • android-chat-ui-kotlin 用Kotlin为Android编写的聊天界面
  • android实现简单模拟聊天界面

    千次阅读 2019-04-17 11:22:04
    1、先看效果 2、布局代码: <?xml version="1.0" encoding="utf-8"?...LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 23,495
精华内容 9,398
关键字:

android聊天界面