博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android流式布局,单选,带edittext,支持软键盘的输入新增和删减删除
阅读量:3977 次
发布时间:2019-05-24

本文共 3065 字,大约阅读时间需要 10 分钟。

        唉,标题写得好累,这么长还不一定能表达清楚。实在没办法,这个自定义布局定制化比较高,特征比较多,因为前阵子做邮箱的APP,参照QQ邮箱时看到这样的布局觉得很酷,也想实现一下。先贴上效果图直观点:

        应该很明了了,流式布局,前面可以加个标题(也支持去掉),最后面默认带个输入框(也可以设置不带),布局主要内容是各个标签,单击选中,会自动弹出软键盘,按删除键就把选中的标签删掉;也支持通过软键盘的删除键自动选中最后一个标签,再按删除键就把该标签删除;支持输入框输入以新增标签,当输入内容并加上逗号,会自动识别并把逗号前面的内容作为新增的标签加入到布局当中。可以看到,发邮件选收件人时这个布局还是很好用的。右侧的加号按钮可以批量新增标签,在写邮件时就可以点击跳转到通讯录列表界面选择多个收件人了,再把数据带回这个布局当中作为新增的标签。

        该布局是参照张鸿洋的相关博客写成的,核心是流式布局和标签的单选,巧妙的地方是给每个流式布局的子控件加上一层FrameLayout便于统一处理,标题、输入框和选中删除是我新增的。具体实现就不多说了,张鸿洋的博客写得非常清楚,有兴趣的请看这两篇、。

        这里直接看怎么用这个布局吧:

添加仓库:在项目根目录的build.gradle加上jitpack仓库:

allprojects {

    repositories {

        ...

        maven { url 'https://jitpack.io' }

    }

}

添加依赖:在项目的build.gradle当中添加依赖:

dependencies {

    implementation 'com.github.qugengting:flowlayout-singlechoose-library:1.0.0'

}

界面调用:

import android.app.Activity;import android.os.Bundle;import android.view.LayoutInflater;import android.view.View;import android.view.Window;import android.widget.ImageButton;import android.widget.TextView;import com.qugengting.view.flowlayout.FlowLayout;import com.qugengting.view.flowlayout.TagAdapter;import com.qugengting.view.flowlayout.TagFlowLayout;public class MainActivity extends Activity {    private String[] mVals = new String[]{"a@qq.com", "b@qq.com", "c@126.com", "d@hotmail.com", "e@foxmail.com"};    private LayoutInflater mInflater;    private ImageButton mImageButtonAdd;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        requestWindowFeature(Window.FEATURE_NO_TITLE);        setContentView(R.layout.activity_main);        mInflater = LayoutInflater.from(this);        TagFlowLayout flowLayout = findViewById(R.id.id_flowlayout);        flowLayout.setAttachLabel(true);//设置是否需要添加标签,默认添加        flowLayout.setAdapter(adapter);        mImageButtonAdd = findViewById(R.id.ib_add);        mImageButtonAdd.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                adapter.add("addI@sina.com");                adapter.add("addII@sina.com");                adapter.add("addIII@sina.com");                adapter.notifyDataChanged();            }        });    }    private TagAdapter adapter = new TagAdapter(mVals) {        @Override        public View getView(FlowLayout parent, int position, String s) {            TextView tv = (TextView) mInflater.inflate(R.layout.tv_item, parent, false);            tv.setText(s);            return tv;        }        @Override        public View getLabelView(FlowLayout parent) {            //如果设置flowLayout.setAttachLabel(false);该标签将不显示            TextView tv = (TextView) mInflater.inflate(R.layout.tv_label, parent, false);            tv.setText("收件人:");            return tv;        }        @Override        public View getInputView(FlowLayout parent) {            return mInflater.inflate(R.layout.edt, parent, false);        }    };    }

 很简单吧,adapter实现三个方法,分别是标签、标题和输入框的布局,然后flowlayout设置setAdapter就可以了,如果不用标题,那么就设置setAttachLabel(false),至于数据的增删,可以操作adapter并adapter.notifyDataChanged()就可以了。

        布局文件就不贴了,有需要的也可以去我的github上看看:,不足之处敬请提出。

 

 

 

你可能感兴趣的文章
Android Property实现介绍
查看>>
Android SystemProperties设置/取得系统属性的用法总结
查看>>
Android 休眠 FLAG_KEEP_SCREEN_ON
查看>>
Android添加onKeyLongPress事件
查看>>
使用微信api将内容分享给好友,或者发送到朋友圈
查看>>
android开发中输入法的弹出和隐藏
查看>>
Android 如何在自定义界面上启用输入法 (How to enable inputmethod for the custom UI)
查看>>
Android MediaCodec小结
查看>>
YUV格式说明
查看>>
MediaCodec and Camera: colorspaces don't match
查看>>
android adb 读写模式 挂载文件系统
查看>>
onTouchEvent方法的使用
查看>>
Android详细解释键盘和鼠标事件
查看>>
如何成为强大的程序员?
查看>>
打包时sun.misc.ServiceConfigurationError
查看>>
摘自 管理自己[Managing Oneself]
查看>>
程序员开发大型应用程序的技巧
查看>>
远程团队管理的10条戒律
查看>>
在服务器上排除问题的头五分钟
查看>>
Diagnosing DFC Configuration Problems
查看>>