一、UI设计
View类位于Android.view包当中;View类的子类一般都位于Android.widget包中
android:id属性,为组件设置一个唯一的标识。
例:android:id = "@+id/user"
android:background,设置背景颜色或者背景图片
android:padding, 设置上下左右四个方向的内边距
还可以具体设置四个方向不同的内边距,paddingLeft,paddingTop,paddingRight,paddingBotton
1、Viewgroup
Viewgroup.LayoutParams类里主要用两个属性:
android:layout_height(高) android:layout_width(宽)
可设置为match_parent, wrap_content
Viewgroup.MarginLayoutParams类的属性有:
android:layout_marginTop; android:layout_marginLeft; android:layout_marginRight; android:layout_marginBottom
可以设置外边距
- TextView
可以插入想要展现出来的text
- Button
可以点击的按钮,会自动对其中的英文字母大写,可以设置textAllCaps为false
- ImageView
可以在布局中插入图片的空间,用android:src属性给ImageView制定一个图片,也可以在逻辑页面动态更改图片
- RecyclerView
用法:一、添加依赖库
二、在布局页面中使用RecyclerView控件
三、自定义适配器
四、 使用适配器往RecyclerView里传入数据
- fragment
碎片,更灵活地利用activity中的空间,和activity很像
- ScrollView
滚动条,直接套在外面就可以实现列表滚动,里面只能有一个直接子控件
- Switch
textOn:控件打开时显示的文字
textOff:控件关闭时显示的文字
thumb:控件开关的图片
track:控件开关的轨迹图片
typeface:设置字体类型
switchMinWidth:开关最小宽度
switchPadding:设置开关 与文字的空白距离
switchTextAppearance:设置文本的风格
checked:设置初始选中状态
splitTrack:是否设置一个间隙,让滑块与底部图片分隔(API 21及以上)
showText:设置是否显示开关上的文字(API 21及以上)
以上是一些基本设置,有可能会自定义开关样式,关于监听事件
aSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked){
//选中状态 可以做一些操作
}else {
//未选中状态 可以做一些操作
}
}
});
- ImageButton
不能设置按钮的文本内容,但它有src和background属性,来设置按钮的背景。
- ChipGroup
流式布局标签,谷歌提供了Chip,ChipGroup使其实现起来更加方便
使用方法:一、引入兼容包,应用MaterialComponents 主题
二、根据style,chip可分为四类,Action chip,Filter Chip,Entry Chip,Choice Chip
三、调整属性
四、对控件进行监听(监听方法和别的控件一样,就不再赘述)
setOnClickListener(点击事件的监听)
setOnCheckedChangeListener(选中状态的监听)
setOnCloseIconClickListener(关闭按钮被点击的监听)
ChipGroup:使用 ChipGroup 可以方便的实现 流式布局效果
-默认情况下, ChipGroup 中的 chip 会横向排列,当超过一行时会执行换行操作。
-如果我们不想让 Chip 换行,那么为 ChipGroup 设置 app:singleLine=true,如果 Chip 会超过一行,则在外层包裹 HorizontalScrollView
-只有当其中包裹的 Chip 是 checkable=true 时,才具有选中效果
- Chip
在9中已表明
- CheckBox
复选框,如果想要对选中的项进行操作,可以把选中项加入集合中,然后对集合进行操作
- RadioGroup
(radiogroup里套着radiobutton)
单选按钮组,互斥选择,比如性别选择。默认是竖直的,如果想要水平的,android:orientation="horizontal"即可。
监听控件:
radiogroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener(){
@Override
public void onCheckedChanged(RadioGroup group, int checkId) {
switch (checkId){
case R.id.nan:
Toast.makeText(MainActivity.this,"你选择的是:"+nan.getText(),Toast.LENGTH_SHORT).show();
break;
case R.id.nv:
Toast.makeText(MainActivity.this,"你选择的是:"+nv.getText(),Toast.LENGTH_SHORT).show();
break;
default:
break;
}
}
});
- RadioButton
内容含在12里
- ToggleButton
和switch差不多,都是开关,不过更倾向于按钮开关,而不是ios的ui那种左右滑动的开关
可供设置的属性:
android:disabledAlpha:设置按钮在禁用时的透明度
android:textOff:按钮没有被选中时显示的文字
android:textOn:按钮被选中时显示的文字 另外,除了这个我们还可以自己写个selector,然后设置下Background属性即可~
- FloatingActionButton
悬浮按钮,右下角那种,使用比较简单。
先添加依赖,compile 'com.android.support:design:26.0.0',然后引用控件即可。
可设置的属性:
android:src:FAB中显示的图标.
app:backgroundTint:正常的背景颜色 ,这里是ColorStateList类型
app:rippleColor:按下时的背景颜色
app:elevation:正常的阴影大小
app:pressedTranslationZ:按下时的阴影大小
app:layout_anchor:设置FAB的锚点,即以哪个控件为参照设置位置
app:layout_anchorGravity:FAB相对于锚点的位置
app:fabSize:FAB的大小,normal或mini(分别对应56dp和40dp)
app:borderWidth:边框大小,最好设置成0dp否则会有边框
android:clickable:一定要设置成true否则没有点击效果
- WebView
可以在自己的应用中打开网页而不是打开浏览器
使用方法:
1、在布局中使用WebView控件
2、 调用webView的getSetting方法可以去设置浏览器的属性
3、调用webView的setWebViewClient()方法并传入一个WebViewClient实例。
4、loadurl方法可以传入要跳转的网址
5、还需要获取权限
- VideoView
播放视频的控件
1、获取权限
SD卡权限,也有可能需要网络权限
2、保持屏幕常亮
android:keepScreenOn="true"
3、xml布局里添加VideoView
<VideoView
android:id="@+id/video_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"/>
4、初始化配置VideoView
略,详见https://www.cnblogs.com/guanxinjing/p/11177739.html
5、播放视频
mVideoView.start();
6、暂停视频
mVideoView.pause();
7、获取播放时间信息
mVideoView.getDuration();//获取视频的总时长
mVideoView.getCurrentPosition();//获取视频的当前播放位置
8、停止视频
mVideoView.stopPlayback();//停止播放视频,并且释放
mVideoView.suspend();//在任何状态下释放媒体播放器
- CalendarView
显示日历控件
在布局文件中添加控件
监听事件
calendarView.setOnDateChangeListener(new CalendarView.OnDateChangeListener() {
@Override
public void onSelectedDayChange(CalendarView view, int year, int month, int dayOfMonth) {
//显示用户选择的日期
Toast.makeText(CalendarviewActivity.this,year + "年" + month + "月" + dayOfMonth + "日",Toast.LENGTH_SHORT).show();
}
});
该控件自定义程度很大,可自定义的东西也非常多,详见
https://blog.csdn.net/huanghaibin_dev/article/details/79040147
https://www.jianshu.com/p/0c06f71d0be8
- ProgressBar
旋转的进度条,可以在进度条到终点时,设置progressBar.setVisibility(View.GONE);使其变得不可见
- ProgressBar(Horizontal)
水平进度条
- SeekBar
进度条,可以手动拖动的,视频进度条。
在进度条下面设置一个textview来显示进度
android:thumb设置图标
android:max="200"设置最大值为200
监听控件:
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int i, boolean b) {//进度条改变
textView.setText(String.valueOf(i-100));//int转化为string
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
- SeekBar(Discrete)
Github上的一个开源控件DiscreteSeekBar,使用方法依然是添加依赖引用控件,详见https://blog.csdn.net/u012702547/article/details/50072867
- RatingBar
星级评分条,详见
https://blog.csdn.net/hfut_why/article/details/90644971
https://www.runoob.com/w3cnote/android-tutorial-ratingbar.html
控制星星数量的属性:android: numStar=" "
默认点亮星星数量:android:rating=" "
最少改变星星数量为1:android:stepSize=“1”
星星数量不可改变:android:isIndicator=“true”
-
SearchBar
-
SearchView
Android原生搜索框,详见
https://www.cnblogs.com/de1021/p/11845109.html
https://blog.csdn.net/loverleslie/article/details/91952774
- TextureView
TextureView 是一个由于显示数据流的UI控件,用途是播放视频;显示相机预览。它可以当做普通的View控件使用,在布局、动画和变换(平移、缩放、旋转等)中非常方便,具体使用方式见:
https://blog.csdn.net/Andreaw/article/details/88761062
- SurfaceView
- Horizontal Divider
水平分割线,android:divider = " "
divider可以是图片文件,也可以是xml绘制的shape。
使用shape的时候一定要添加<size> ,一定要添加color,即使是透明也要写上
android:showDividers = "middle|end|beginning|none"
https://blog.csdn.net/bingshushu/article/details/51444206
- Vertical Divider
竖直分割线,同上
- ConstraintLayout
约束布局,解决布局嵌套过多的问题 ,里面的控件的定位都是相对于其他控件的
https://www.jianshu.com/p/17ec9bd6ca8a
- Guideline(Horizontal)
辅助线,默认是GONE,也就是看不见的
Guideline还有三个重要的属性,每个Guideline只能指定其中一个:
1、layout_constraintGuide_begin,指定左侧或顶部的固定距离,如100dp,在距离左侧或者顶部100dp的位置会出现一条辅助线
2、layout_constraintGuide_end,指定右侧或底部的固定距离,如30dp,在距离右侧或底部30dp的位置会出现一条辅助线
3、layout_constraintGuide_percent,指定在父控件中的宽度或高度的百分比,如0.8,表示距离顶部或者左侧的80%的距离。
- Guideline(Vertical)
同上
- LinearLayout(horizontal)
过于基础,略
- LinearLayout(vertical)
过于基础,略
- FrameLayout
过于基础,略
- TableLayout
过于基础,略
-
TableRow
-
Space
Space 是一个轻量级的 View 子类,可用于在通用布局中的组件之间创建间隙。适用场景:填充没有内容处,如果有软键盘弹出会压缩space,不至于使原有的控件无法显示
https://www.jianshu.com/p/2cd35845b3b3
-
Spinner
-
HorizontalScrollView
横向滑动
- NestedScrollView
支持嵌套滑动的scrollview,无论作为父控件还是子控件。
- ViewPager
ViewPager 是android support V4 包中的类,这个类可以让用户左右切换当前的View
ViewPager直接继承自ViewGroup类,它是一个容器类,可以在其中添加其他的View
ViewPager类需要一个PagerAdapter适配器,来为他提供数据。
ViewPager经常和Fragment一起使用,并且提供了专门的FragmentPagerAdapter和FragmentStatePagerAdapter类
- CardView
卡片视图,更立体
- AppBarLayout
在这里插入代码片
- BottomAppBar
用来实现这样的效果,简单使用方法:https://www.jianshu.com/p/20dbe17d8c91
- NavigationView
左侧菜单栏,之前做过
- **BottomNavigationView
底部导航栏
- Toolbar
顶部工具栏,https://www.jianshu.com/p/ae0013a4f71a
- TabLayout
实现分tab导航,把不同功能模块划分开来
-
TabItem
-
ViewStub
-
include
不知道是不是引用自定义控件 -
NavHostFragment
-
view
-
requestFocus
标签用于指定屏幕内的焦点View。此标签在哪里,哪里就是焦点
- 图像切换器组件ImageSwitcher
这个控件实现的效果就是手机相册,或者各种应用查看图片时,左右滑动查看图片的效果。
设置淡出:
is.setOutAnimation(AnimationUtils.loadAnimation(MainActivity.this, android.R.anim.fade_out));
android.R.anim.fade_out是系统自带的淡出动画效果,android.R.anim.fade_in即为淡入
//设置图片切换工厂
is.setFactory(new ViewSwitcher.ViewFactory(){
@Override
public View makeView(){
//创建ImageView对象,设置图片资源,返回ImageView对象
}
});
//设置图片的监听器,然后在重写的onClick方法中,利用setImageResource方法,设置切换后的图片资源。
控制UI界面的方法:
推荐使用XML布局文件控制UI界面,方法:
- 在Android应用的res/layout 目录下编写XML布局文件
- 在Activity中使用以下Java代码显示XML文件中布局的内容
setContentView(R.layout.activity_main);