[Android]Space控件的应用场景
Space控件是在Android 4.0中加入,是个空白的view,一般用于填充View组件中的间隙。
support-v4包里提供了兼容低版本的Space控件。
#源码分析 Space控件源码非常简单,先来看看
public class Space extends View {public Space(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);if (getVisibility() == VISIBLE) {setVisibility(INVISIBLE);}}public Space(Context context, AttributeSet attrs) {this(context, attrs, 0);}public Space(Context context) {this(context, null);}/*** Draw nothing.** @param canvas an unused parameter.*/@Overridepublic void draw(Canvas canvas) {}/*** Compare to: {@link View#getDefaultSize(int, int)}* If mode is AT_MOST, return the child size instead of the parent size* (unless it is too big).*/private static int getDefaultSize2(int size, int measureSpec) {int result = size;int specMode = MeasureSpec.getMode(measureSpec);int specSize = MeasureSpec.getSize(measureSpec);switch (specMode) {case MeasureSpec.UNSPECIFIED:result = size;break;case MeasureSpec.AT_MOST:result = Math.min(size, specSize);break;case MeasureSpec.EXACTLY:result = specSize;break;}return result;}@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {setMeasuredDimension(getDefaultSize2(getSuggestedMinimumWidth(), widthMeasureSpec),getDefaultSize2(getSuggestedMinimumHeight(), heightMeasureSpec));}
}
复制代码
该控件直接继承View组件,基本每个View控件都有onDraw方法用来绘制自身,而Space控件onDraw方法进行了一个空的实现。
Space控件在布局中只占位置,而不去绘制渲染。 组件中的间隙用Space控件填充比用其它控件填充可以提高绘制效率。
##应用场景
下面是UI提供的两张效果图,图一是没有软键盘的效果,图二是有软键盘的效果。
需要注意的是,当键盘弹出的时候,并没有把上面的toolbar挤掉。而是压缩了原有的布局。 这时候我们需要让activity配置windowSoftInputMode为adjustResize,而不是使用默认值
<activityandroid:name="..."android:windowSoftInputMode="adjustResize" />
复制代码
中间的布局并没有完全居中,而是居中偏上。直接定义相对父容器居中不太理想, marginTop之类的又不太容易适配。 所以我采取了比较容易适配的方式。
我把中间布局上下两端用Space填充,又通过weight控制,当键盘弹出的时候会自动压缩Space空间,这样适配就非常简单了。
布局代码:
<?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:id="@+id/activity_login"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context="com.troila.tdv.ui.SettingIPActivity"><includeandroid:id="@+id/toolbar"layout="@layout/toolbar" /><android.support.v4.widget.Spaceandroid:layout_width="wrap_content"android:layout_height="0dp"android:layout_weight="4"/><LinearLayoutandroid:layout_gravity="center"android:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="vertical"android:background="@drawable/setting_bg"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center"android:gravity="center"android:layout_marginBottom="@dimen/login_bottom_15"android:layout_marginTop="@dimen/login_top_15"android:textStyle="bold"android:textSize="@dimen/text_large"android:textColor="@color/white"android:text="配置服务器信息"/><include layout="@layout/divider"/><LinearLayoutandroid:paddingTop="@dimen/login_top_20"android:paddingBottom="@dimen/login_bottom_15"android:weightSum="6"android:layout_width="match_parent"android:layout_height="wrap_content"><TextViewandroid:layout_width="0dp"android:layout_weight="2"android:layout_height="wrap_content"android:text="服务器IP地址"android:textColor="@color/white"android:textSize="@dimen/text_normal"android:gravity="end"/><com.troila.tdv.ui.widget.ClearableEditTextandroid:textColor="@color/white"android:inputType="numberDecimal"android:id="@+id/et_ip"android:layout_marginStart="10dp"android:layout_marginLeft="10dp"android:layout_width="0dp"android:layout_weight="3"android:digits="0123456789."android:maxLines="1"android:layout_height="wrap_content" /></LinearLayout><LinearLayoutandroid:paddingTop="@dimen/login_top_10"android:paddingBottom="@dimen/login_bottom_15"android:weightSum="6"android:layout_width="match_parent"android:layout_height="wrap_content"><TextViewandroid:layout_width="0dp"android:layout_weight="2"android:textColor="@color/white"android:textSize="@dimen/text_normal"android:layout_height="wrap_content"android:text="端口号"android:gravity="end"/><com.troila.tdv.ui.widget.ClearableEditTextandroid:textColor="@color/white"android:inputType="number"android:maxLines="1"android:id="@+id/et_port"android:layout_marginStart="10dp"android:layout_marginLeft="10dp"android:layout_width="0dp"android:layout_weight="3"android:layout_height="wrap_content" /></LinearLayout><Buttonandroid:id="@+id/btn_next"android:layout_width="wrap_content"android:layout_gravity="center"android:textStyle="bold"android:text="下一步"android:layout_marginBottom="@dimen/login_bottom_15"android:background="@drawable/selector_login"android:textColor="@color/white"android:textSize="@dimen/text_normal"android:layout_height="wrap_content" /></LinearLayout><android.support.v4.widget.Spaceandroid:layout_width="wrap_content"android:layout_height="0dp"android:layout_weight="6"/>
</LinearLayout>
复制代码
更多精彩请关注微信公众账号likeDev。
[Android]Space控件的应用场景相关推荐
- android space控件 变成线条,学Android Space控件,只看这篇文章就行了
Space Space is a lightweight View subclass that may be used to create gaps between components in gen ...
- Android神奇“控件”-----RemoteViews
本篇文章已授权微信公众号 guolin_blog (郭霖)独家发布 转载请注明 http://blog.csdn.net/wrg_20100512/article/details/53940485 好 ...
- Android 原生控件之三 ProgressBar
Android 原生控件之三 ProgressBar 相关 来源 开始 不确定的进度 确定的进度 XML属性 1.android:animationResolution 2.android:indet ...
- Android开源控件收集整理
一 .基本控件 TextView HTextView 一款支持TextView文字动画效果的Android组件库.GitHub - hanks-zyh/HTextView: Animation eff ...
- Android开源控件ViewPager Indicator的使用方法
1月16日厦门 OSC 源创会火热报名中,奖品多多哦 摘要 Android开源控件ViewPager Indicator的使用介绍 ViewPagerIndicator 目录[-] 1. V ...
- 日历控件的android代码,Android日历控件PickTime代码实例
Android日历控件PickTime代码实例 发布时间:2020-10-03 16:05:51 来源:脚本之家 阅读:86 作者:手撕高达的村长 最近做项目,需要设置用户的生日,所以做这样一个功能. ...
- 时间选择控件在不同场景下的应用
时间选择控件在产品设计中是一个非常常见且通用的元素,在各种产品中几乎都有应用.随着各种App和网站类产品在不同操作场景中的渗透发展,我们在进行产品设计时也应更追求功能实现方式的"恰如其分&q ...
- android 获取控件高度_安卓开发入门教程UI控件_ImageView
什么是ImageView ImageView是用于显示图片的UI控件. 基础样例 1.展示本地图片 效果图 代码 <ImageViewandroid:layout_width="wra ...
- xamarin.android 控件,Android 库控件 - Xamarin | Microsoft Docs
Xamarin Android 库控件Xamarin.Android Gallery control 03/15/2018 本文内容 Gallery是一种布局小组件,用于显示水平滚动列表中的项,并将当 ...
最新文章
- autohotkey快捷键
- 人脑如何模拟NLP?
- 7、实例:计算课程结束的日期
- IDEA使用从Eclipse过来的快捷键
- gojs 部分功能实现
- Flutter入门进阶之旅(七)GestureDetector
- 创建hadoop账号
- talib python文档_TALib中文文档代码实现
- jenkins中配置git下载代码
- 调试EasyDarwin开源项目EasyCamera-HK接入海康IPCamera 摄像机所遇到的大坑
- U盘引导启动LINUX
- erpc的设计和工作机制
- [面试笔试整理1]:深度学习机器学习面试问题准备(必会)
- python+tkinter仿制win10标准型计算器(中文版)完美教学
- 怎么在多层循环中直接跳出循环
- 怎么去学习绘画格子裙?该怎么画格子裙?
- 基于IC5000如何利用iSYSTEM winIDEA烧写+调试程序
- MySQL 统计上一个自然周 周一到周日的数据 为空则补0实现
- web前端期末大作业:旅游网页设计与实现——个人旅游博客(4页)HTML+CSS
- 阴霾“强势霸屏”长三角 天际上演“失踪的太阳”
热门文章
- android 利用eclipse观察内存变化情况
- PHP起点 - PHP常量
- org.simpleframework.xml.core.Persister
- MMC检测到此管理单元发生一个错误。建议关闭并重新启动MMC
- [翻译]XNA 3.0 Game Programming Recipes之twenty-one
- Log binomial 回归在队列中的应用
- Jenkins 设置镜像_Windows Docker Agent 镜像可以常规使用了
- 光流 | 基于LK(Lucas-Kanade)光流算法的运动目标检测
- 嵌入式笔录(3)-电容,频率与幅度基础
- NLP面试时,项目经历要怎么讲?