首页 文章 精选 留言 我的

精选列表

搜索[MoE动态路由],共10000篇文章
优秀的个人博客,低调大师

使用代码动态增删布局(2018.8重编版)

目录 效果图 前言 布局文件 实现 最后 效果图 不多废话, 先上图, 有兴趣再看下去: 效果图 前言 用代码增删布局还是很常用的. 布局文件 先来看看布局文件, 不是很复杂, 但是涉及到之后java部分的代码, 所以必须都贴出来. 不过你可以看下预览图就好: 布局预览图 <?xml version="1.0" encoding="utf-8"?> <ScrollView 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.so.moreview.ui.activity.MainActivity"> <LinearLayout android:id="@+id/ll_content" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:padding="@dimen/eight_dp"> <LinearLayout android:id="@+id/ll_item" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@android:color/darker_gray" android:orientation="vertical" android:padding="@dimen/eight_dp" tools:ignore="UselessParent"> <EditText android:id="@+id/et_item" android:layout_width="match_parent" android:layout_height="@dimen/forty_dp" android:background="@android:color/white" android:gravity="center_vertical" android:inputType="textMultiLine" android:textSize="@dimen/sixteen_sp" tools:ignore="LabelFor" /> <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="@dimen/eight_dp"> <ImageButton android:id="@+id/ib_add" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentEnd="true" android:background="@drawable/add" android:contentDescription="" tools:ignore="ContentDescription" /> </RelativeLayout> </LinearLayout> </LinearLayout> </ScrollView> 实现 LinkedList<ImageButton> mAddList; mAddList.add(curView, btAdd); LinkedList<ImageButton> mDelList; mDelList.add(curView, btDel); 这里我使用LinkedList<ImageButton>实例存储ImageButton, 就是为了让增删的时候方便一些. 最关键的是增删按钮的代码: 添加条目 /** * @param v 添加一个新条目 */ private void addItem(View v) { if (v == null) { return; } // 1. 根据传入的v, 判断是mListAddBtn中的哪一个 int curView = -1; for (int i = 0; i < mAddList.size(); i++) { if (mAddList.get(i) == v) { curView = i; break; } } // 2. 根据获取的值添加控件 if (curView >= 0) { curView++; // ll_item LinearLayout ll = new LinearLayout(MainActivity.this); LinearLayout.LayoutParams llParams = new LinearLayout.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); llParams.setMargins(0, UIUtil.dp2px(8), 0, 0); ll.setLayoutParams(llParams); ll.setBackgroundColor(ContextCompat.getColor(this, android.R.color.darker_gray)); ll.setPadding(UIUtil.dp2px(8), UIUtil.dp2px(8), UIUtil.dp2px(8), UIUtil.dp2px(8)); ll.setOrientation(LinearLayout.VERTICAL); // et_item EditText et = new EditText(MainActivity.this); LinearLayout.LayoutParams etParams = new LinearLayout.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, mEtHeight); et.setLayoutParams(etParams); et.setBackgroundColor(ContextCompat.getColor(this, android.R.color.white)); et.setGravity(Gravity.CENTER_VERTICAL); et.setInputType(InputType.TYPE_TEXT_FLAG_MULTI_LINE); et.setTextSize(16); et.setId(mEtId); ll.addView(et); RelativeLayout rl = new RelativeLayout(MainActivity.this); RelativeLayout.LayoutParams rlParams = new RelativeLayout.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); rlParams.setMargins(0, UIUtil.dp2px(8), 0, 0); rl.setLayoutParams(rlParams); // ib_add ImageButton btAdd = new ImageButton(MainActivity.this); RelativeLayout.LayoutParams btAddParams = new RelativeLayout.LayoutParams( ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); btAddParams.addRule(RelativeLayout.ALIGN_PARENT_END); btAdd.setLayoutParams(btAddParams); btAdd.setBackgroundResource(R.drawable.add); btAdd.setId(mBtnAddId); btAdd.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { addItem(v); } }); rl.addView(btAdd); mAddList.add(curView, btAdd); // ib_del ImageButton btDel = new ImageButton(MainActivity.this); RelativeLayout.LayoutParams btDelParams = new RelativeLayout.LayoutParams( ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); btDelParams.setMargins(0, 0, UIUtil.dp2px(8), 0); btDelParams.addRule(RelativeLayout.LEFT_OF, mBtnAddId); btDel.setLayoutParams(btDelParams); btDel.setBackgroundResource(R.drawable.del); btDel.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { delItem(v); } }); rl.addView(btDel); mDelList.add(curView, btDel); ll.addView(rl); mLlContent.addView(ll, curView); mBtnAddId++; mEtId++; } } 看起来有些长, 但是对照布局文件来看, 就非常简单了, 就是用java代码把布局文件里写的再写一遍. 删除条目 /** * @param v 删除一个新的EditText条目 */ private void delItem(View v) { if (v == null) { return; } int curView = -1; for (int i = 0; i < mDelList.size(); i++) { if (mDelList.get(i) == v) { curView = i; break; } } if (curView >= 0) { mAddList.remove(curView); mDelList.remove(curView); mLlContent.removeViewAt(curView); } } 删除就很简单了, 先弄清点击的是哪个按钮, 然后把相关的一股脑删了即可. 最后 其实这样改动视图还是比较过时的, 之后会准备一篇RecyclerView增删条目的文章. 到时候一对比就可以看到效果了. 但是在某些场合用用还是可以的, 比如弹窗中微调布局之类的. 喜欢记得点赞哦, 暗中关注我也是可以的~

优秀的个人博客,低调大师

英特尔固态盘产品技术最新动态

在深圳的IDF2016上,英特尔向国内用户推介其面向服务器市场的具备可靠、快速响应和经济高效等优势的SSD新品,这是其首次将3D NAND技术引入SSD产品中获得的结果。 3D NAND技术 3D NAND技术是英特尔和美光合作研发的,传统的SSD采用平面结构因此在存储方面存在限制,英特尔和美光通力合作成功的将内存颗粒堆叠在一起解决平面NAND闪存带来的限制,可打造出存储容量比同类NAND技术高达三倍的存储设备。 3D NAND技术的重要好处就是成本将会比现有技术更低,因为无需再通过升级制程工艺、缩小cell单元以增加容量密度。同时可靠性和性能会更好,因为工艺越先进,NAND的氧化层越薄,可靠性也越差;或者厂商采取额外的手段来弥补,但这又会提高成本,以致于达到某个点之后制程工艺已经无法带来优势了。 基于以上的特点,英特尔采用3D NAND技术的固态盘实现了很大的成本节约、能耗降低,以及大幅的性能提升以全面满足众多消费类移动设备,更重要的是具备了服务器市场需要的高可靠性的特点。 全面覆盖云到端 在当今的数字世界,无论是在云端、数据中心、PC 还是互联设备上,对于用户而言,能够以一种快速、可靠的方式访问并存储数据十分重要。从银行和医疗应用,到社交媒体和流媒体娱乐,数据存储解决方案在具备可靠、快速响应和经济高效等优势的同时,还必须能够提供适当的容量。 早在此前于美国举办的英特尔云计算日(Cloud Day)大会上,英特尔就发布了专为云和企业工作负载优化的全新固态盘产品,旨在支持用户快速且可靠地访问数据。 作为英特尔首款使用3D NAND技术的固态盘,英特尔固态盘DC P3320系列相比上一代英特尔固态盘,不仅保持了英特尔固态盘一贯具备的出色服务质量、数据完整性与可靠性的优势,在性价比方面也实现了进一步的提升。 英特尔还同时推出了首款采用NVM Express* (NVMe*)标准的双端口PCI Express* (PCIe*)固态盘DC D3700/D3600 系列,以全面满足企业关键业务私有云平台与高可用性存储部署的需求。此外,英特尔也扩展了其固态盘产品组合,新增了面向入门级云和数据中心部署、消费级应用、企业 PC ,以及物联网(IoT)应用的产品。 更让人期待3D XPoint技术 英特尔和美光合作开发的3D XPoint采用全新的交叉点阵结构,能够支持对单个存储单元的独立访问。3D XPoint闪存各方面都超越了目前的内存及闪存,性能是普通闪存的1000倍,可靠性也是普通闪存的1000倍,容量密度是内存的10倍,而且是非易失性的,断电也不会损失数据。 英特尔将在未来3-5年内投资数十亿美元,将其与美光合资开发的最新非易失性存储技术引入中国,升级设在大连的工厂,预计明年将与大陆的用户见面。 本文转自d1net(转载)

优秀的个人博客,低调大师

AliSQL · 社区动态 · 关于开源之后评论的评论

背景 AliSQL在云栖大会宣布开源,并有幸请到MySQL之父、MariaDB创始人Monty一起见证。 我们在将消息公布到社区之后,也同时关注社区的反馈。以下是对于评论的评论。 handshake protocol 声音:以阿里的个性就是大多数开源了 push 到 github 后面就不怎么管了 其实这么说的人并没有真正全面的去看阿里开源的趋势,大家会看到这几年的分支维护的是越来越健康的。“后面就不怎么管“,这里的“后面”说得很有艺术性,除了天地之外没有什么东西是保证天长地久的。活跃三天和活跃三十年,只要停下来,你说的“后面”就都是对的。如果以这个为标准,那么不只是中国的开源分支,全世界的开源产品都是到“后面”就不维护的。 因此我们眼中的健康的开源会是什么样呢?我觉得最重要的是态度,然后是天时地利。 态度是:我们把开源分支和维护作为我们的一

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

用户登录
用户注册