这里主要根据书本知识网络知识和使用过的控件及好用的第三方控件做一个总结统计,肯定不全面,但一下也想不到多少。一步步写下去发现真的是越基础的控件越精彩,因为现在有很多封装好的控件很少会去调原生的自己写,但是多了解一点也没有坏处。
目录
文本类
1、TextView
2、EditText
3、AutoCompleteTextView(单项提示的自动完成文本框)
4、MultiAutoCompleteTextView(多项提示的自动完成文本框)
5、TextInputLayout
6、SearchView带搜索输入框
7、TextSwitcher实现TextView的上下滚动
8、Toolbar
按钮/操作类
1、Button
2、ImageButton 图片按钮
3、CheckBox 复选框
4、RadioButton 单选框
5、Switch 状态切换按钮 (还有SwitchCompat)
6、ToggleButton 开关按钮
7、悬浮按钮FloatingButton
8、DatePicker&TimePicker
9、日历控件(第三方控件)
10、下拉刷新SwipeRefreshLayout
11、RecycleView
12、ListView
13、ExpandableListView
14、GridLayout+GridView
15、Spinner
16、CardView
17、底部动作条Bottom Sheet(待续...)
进度、滑块类
1、ProgressBar 圆环式的进度加载
2、seekBar 拖动条(滑块)
3、RatingBar 星级评分
4、进度/步骤指示器合集
弹窗类
1、SnackBar
2、Toast
3、DatePickerDialog&TimePickerDialog
4、AlertDialog
5、DialogFragment
6、PopupWindow
标题栏/菜单栏
2、TabLayout+ViewPager
3、抽屉式菜单DrawerLayout(待续...)
4、可隐藏和折叠式标题栏CoordinatorLayout / CollapsingToolbarLayout
*TIPS:android:singleLine="true"(如果使用lines="1"可能存在crash情况),否则ellipsize设置是无效的
*TIPS:跑马灯模式经测试还需要代码添加textView.setSelect(true)才能生效
对于识别到的连接就会跳转至相应的基础页面
附上一个比较全面的属性链接:Android TextView 最全的XML属性
类型太多了,常用的多是textPassword、numberpassword、text、number等,我还发先有autoComplete,不过这个应该直接用它的子类AutoCompleteTextView实现就好了。
Android edittext 属性inputtype详解
*TIPS:digits和inputType同时作用时,键盘弹出的内容根据input来显示,但输入以digits为准。
*TIPS:EdiText可以通过setError()来实现输入信息错误的提示,但个人觉得实现此类效果用TextInputLayout+EdiText比较美观
*TIPS:去除下划线的最简单的方式应该是设置背景为@null了吧
*TIPS:需要设置single="true",或者inputType="text"(后者设置后会变成单行,一个意思)。同样是一行,lines="1"是无效的哦
*TIPS:如果是用于登录时为防止用户不小心输入的多余空格(有些输入法输入一个单词后会自带一个空格)导致的用户名错误要去除多余空格 string.trim()
已经设置single="true"且下面存在其他的ediText,enter自动变为 下一步
actionGo:开始
actionDown|actionNext:如果底下还有ediText则变为下一步(常用于用户名项)
actionNone:enter还是enter,但是如果是下面还有ediText回车可以跳到下一行
actionPrevious:返回上一个ediText
actionSearvh:搜索
actionSend:发送
......
以上这些变化都是按钮样式/字的变化,更符合使用需求而已,具体的使用还是要搭配代码。如搜索发送这类的,记得设置监听setOnEditorActionListener()
文本提示框的内容通过是适配器设置,简单示例如下
ArrayAdapter adapter = new ArrayAdapter(A_Activity.this,android.R.layout.simple_list_item_1, new String[]{"test1","test2","test3","test4"});
autoComplete.setAdapter(adapter);
multi和auto相比想要实现多个标签输入还要设置逗号分隔符
multiComplete.setTokenizer(new MultiAutoCompleteTextView.CommaTokenizer());
TextInputLayout只能嵌套一个布局,且必须为EditView或其子类(TextInputEditText)
实现的效果很像web的许多表单填写。
TextInputLayout可以实现很多常用的功能而不需要额外的操作,比如错误信息提示,显示字符数,密码是否可见等表单常用到的效果。
TextInputLayout与TextInputEditText详解
和设置了actionSearch的EditText在功能上应该没什么区别,样式比较直观,一看就知道是搜索框。
百度到同系列还有ImageSwitcher和ViewSwither
TextSwitcher常用于那种标题自动滚动的公告栏上。emmmm 纵向的文字轮播图?
可以设置切入切除的动画,如果需要循环轮播的话则需要用到handler.postDelayed()
一个相对封装好的标题栏,除了文字无法居中没有什么毛病。emmmm文字不能居中也不算小问题,UI跟我叨叨了好一段时间。
文字不能居中的主要问题是Toolbar内部本身就存在偏移,所有处于Toolbar类的空间的居中就有问题。
Toolbar结合CoordinatorLayout 或 CollapsingToolbarLayout还能实现标题栏的隐藏和折叠
Button大家用的都非常多,不详细写
同上
需要注意的是自定义图标的时候要设置选中状态图标和未选中状态图标
常用于RadioGroup+RadioButton做单选组
SwitchCompat来自于Material Design。switchSwitchCompat和属性基本相同,只是一个同android:一个用的是app:
基本上靠简单的自定义就能符合很多情况下的UI要求
按Switch来说:
ToggleButton和Switch在我看来都是一个用处一个效果,选一个用就好。
悬浮按钮多放在显眼的位置进行比较常用重要的操作,推荐一个开源android-floating-action-button,可以实现悬浮按钮的展开,感觉比较实用。
日期选择,时间选择
huanghaibin-dev/CalendarView
算比较常见的控件了。监听下拉事件进行刷新,刷新完毕记得swipeRefrensh.setRefreshhing(false)关闭小圈圈
在我的进阶1-1里提过
我现在几乎没有用ListView了。
ExpandableListView可以有一级列表和二级列表,比较适用于分组类的列表
网格式的列表,看需求就好。RecycleView也可以实现网格化的布局。还没有对比两种实现方式有什么区别,不过基本效果应该都差不多吧
原生的下拉框列表,个人觉得有点丑。
在我的进阶1-1里提过
应该是最简单的进度控件了。
想要提一下的就是progressBar的颜色是根据colorPrimary来定的,目前没有发现可以单独改变颜色的方法。
现在开源也出现了很多很棒的进度条框架,这里放两个我常用的Android-SpinKit,AVLoadingIndicatorView。
seekBar目前没有使用的需求,简单测试了一下做个记录。
seekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
/**
* 拖动过程中的监听
*
* @param seekBar
* @param progress 进度百分比
* @param fromUser 是否是用户触发的操作
*/
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
}
/**
* 手指按下监听
*/
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
/**
* 手指离开监听
*/
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
轨道滑块什么的有需要自定义就好了
ratingBar和seekbar类似,不过监听事件就没有那么多样了,只有一个 void onRatingChangee(RatingBar ratingBar,float rating,boolean fromUser),和seekBar的大同小异
这个指示器吧,我觉得还是去用专门的控件好了。
指示器这个,好像没有原生的。那就列几个开源控件吧。
CircleIndicator
Stepper-indicator
StepView
lottie-android
还有很多...
弹窗类都不需要在布局中事先定义(弹窗里的内容布局不算)
弹出框(需要用户操作才会关闭的)需要主要让弹出框随activity的生命周期而关闭,否则当弹框还没有正常关闭而actiivty销毁时导致窗体泄漏问题(经常发生在横竖屏切换和多任务窗口的时候)
SnackBar和Toast很像,主要区别在于SnackBar可以有操作(setAction()),比如那种删除后可短时间内科撤销的那种。
需要注意的就是很多时候会要求弹出的SnackBar不能遮挡布局里的其他控件比如悬浮按钮。一般SnackBar要搭配CoordinatorLayout,将make()的第一个参数view设置为CoordinatorLayout。
不说
日期选择弹出框和时间选择弹出框和控件的时间选择日期选择是一样的。
这里建议用到日期选择的时候写个TimeUtils工具类用于各种格式的时间转换和规范化,写一次差不多以后都能用到。
个人认为比较常出现的格式有:
我的时间工具类下载链接
比较简单的提示性弹出 ,可以自定义layout_view来符合设计需求,但弹窗的大小有限,不能过大,像那种几乎占满屏幕的弹出框做不了。注意弹框伴随actiivty生命周期的正确销毁。
就是一个放在弹框层的Fragment。注意弹框伴随actiivty生命周期的正确销毁。
它可实现上面所说的几乎占满屏幕的弹出框,大小可设置。还可以选择从哪个方向弹出或者直接显示。像淘宝京东筛选框用popupWindow实现就很容易了。注意弹框伴随actiivty生命周期的正确销毁。
之前写过,直接看我的APP开发之选项卡式首页制作——BottomNavigationView
建议标签数3~5个
这个也是比较常用的类型,建议使用不少于2个标签的情况下(一个真的没必要这样啊),标签数过多导致文字多行那就请不要固定标题改滚动app:tabMode="scrollable"
提一下我用的ViewPager是我继承重写过的。主要就是为了可以禁止左右滑动。因为我发现很多时候滑动切换真的很讨厌(`皿´)
禁止滑动主要在onTouchEvent和onInterceptTouchEvent方法中返回false。为了方便使用我通过控制一个boolean参数来决定是否禁止滑动。
实现像tablayout这类标签样式的第三方控件好像也很多,想要样式动画精美一点的可以找第三方控件。
android进阶之光说的很详细,提一下我使用过程中遇到的问题和注意事项。
顺便提一下沉浸式的实现,状态栏全透明+布局延伸至状态栏。网上很多,有的行有的不行
今天只有9.0的手机测试,最简单的状态栏全透明写法(API >= 21)应该就是在主题中设置
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN) 实现全屏显示
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR) 设置状态栏字体黑色
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE) 设置状态栏字体白色
周末要出去玩啦~ 一些没来得及写的就先这样吧,玩完再说。