博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android开发笔记(一百三十四)协调布局CoordinatorLayout
阅读量:5291 次
发布时间:2019-06-14

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

协调布局CoordinatorLayout

Android自5.0之后对UI做了较大的提升。一个重大的改进是推出了MaterialDesign库,而该库的基础即为协调布局CoordinatorLayout,差点儿全部的design控件都依赖于该布局。协调布局的含义。指的是内部控件互相之前的动作关联,比方在A视图的位置发生变化之时。B视图的位置也依照某种规则来变化。仿佛弹钢琴有了协奏曲一般。

使用CoordinatorLayout时。要注意以下几点:
1、导入design库;
2、根布局採用android.support.design.widget.CoordinatorLayout;
3、CoordinatorLayout节点要加入命名空间声明xmlns:app="http://schemas.android.com/apk/res-auto";
CoordinatorLayout继承自ViewGroup,实现效果相似于RelativeLayout。若要指定子视图在整个页面中的位置,有以下几个办法:
1、使用layout_gravity属性,指定子视图在CoordinatorLayout内部的对齐方式。
2、使用app:layout_anchor和app:layout_anchorGravity属性,指定子视图相对于其他子视图的位置。当中app:layout_anchor表示当前以哪个视图做为參照物,app:layout_anchorGravity表示本视图相对于參照物的对齐方式。

3、使用app:layout_behavior属性,指定子视图相对于其他视图的行为,当对方的位置发生变化时,本视图的位置也要随之对应变化。

以下是使用anchor方式定义子视图方位的截图,当中红色方块位于整个页面的右上方:
以下是演示anchor方式的布局文件样例:

悬浮buttonFloatingActionButton

FloatingActionButton是design库提供的一个酷炫button。它继承自ImageButton,。除了图像button的全部功能之外,还提供了以下的其他功能:
1、FloatingActionButton会悬浮在其他视图之上。即使别的视图在布局文件里位于FloatingActionButton后面。
2、在隐藏、显示button上时会播放动画;当中隐藏操作是调用hide方法。显示操作是调用show方法;
3、FloatingActionButton默认会随着Snackbar的出现或消失而动态调整位置。有关Snackbar的说明參见《 》;
以下是悬浮button自隐藏和显示时的动画效果截图:
以下是悬浮button尾随提示条上移和下移的效果截图:
以下是演示悬浮button的布局文件样例:

底部弹窗BottomSheetBehavior

design库提供了Snackbar在页面底部弹出提示条。但是Snackbar着实简单。假设我们想在底部弹出一组菜单。Snackbar就无能为力了。

因此,Android又提供了BottomSheetBehavior用来自己定义底部弹窗。只是它并不是一种新控件,而是给现有视图加上几个新属性。就可以实现弹窗与关闭的效果。

这几个新增属性的说明例如以下:
app:behavior_hideable : 指定弹窗是否同意隐藏。
app:behavior_peekHeight : 指定弹窗的预览高度。

app:elevation : 指定弹窗的高程。
app:layout_behavior : 指定弹窗的行为。像底部弹窗固定取值"@string/bottom_sheet_behavior"。

BottomSheetBehavior在代码中使用的方法例如以下所看到的:
from : 从指定视图获取底部弹窗行为。

getState : 获取该行为的状态。
setState : 设置该行为的状态。

取值STATE_EXPANDED表示全然展开。取值STATE_COLLAPSED表示折叠;取值STATE_HIDDEN表示隐藏。

setPeekHeight : 设置弹窗的预览高度,即setState取值STATE_COLLAPSED时设定的折叠高度。

setHideable : 设置弹窗是否同意隐藏。
以下是底部弹窗的演示截图:
以下是使用底部弹窗的布局样例:

以下是使用底部弹窗的代码样例:
public class BottomSheetActivity extends AppCompatActivity implements OnClickListener {	private Button btn_bottomsheet;	private BottomSheetBehavior behavior;	@Override	protected void onCreate(Bundle savedInstanceState) {		super.onCreate(savedInstanceState);		setContentView(R.layout.activity_bottomsheet);		btn_bottomsheet = (Button) findViewById(R.id.btn_bottomsheet);		btn_bottomsheet.setOnClickListener(this);		View ll_bottom = (View) findViewById(R.id.ll_bottom);		behavior = BottomSheetBehavior.from(ll_bottom);		//假设马上setState,会报错java.lang.NullPointerException		mHandler.postDelayed(mState, 50);	}	@Override	public void onClick(View v) {		if (v.getId() == R.id.btn_bottomsheet) {			if (behavior.getState() == BottomSheetBehavior.STATE_HIDDEN) {				behavior.setState(BottomSheetBehavior.STATE_COLLAPSED);				btn_bottomsheet.setText("隐藏底部弹窗");			} else {				behavior.setState(BottomSheetBehavior.STATE_HIDDEN);				btn_bottomsheet.setText("显示底部弹窗");			}		}	}		private Handler mHandler = new Handler();	private Runnable mState = new Runnable() {		@Override		public void run() {			behavior.setState(BottomSheetBehavior.STATE_HIDDEN);		}	};}
posted on
2017-08-07 16:46 阅读(
...) 评论(
...)

转载于:https://www.cnblogs.com/mthoutai/p/7299933.html

你可能感兴趣的文章
数据库的高级查询
查看>>
HttpClient(一)-- HelloWorld
查看>>
dump调试函数
查看>>
Android 利用Sharp样式设置文本框EditText圆角形状
查看>>
[YTU]_2443 ( C++习题 复数类--重载运算符3+)
查看>>
sdut_1189
查看>>
归并排序
查看>>
机器视觉:SSD Single Shot MultiBox Detector
查看>>
走遍美国 —— 各州及其别名
查看>>
国内外免费电子书(数学、算法、图像、深度学习、机器学习)
查看>>
狄利克雷过程(Dirichlet Process)
查看>>
五子棋项目的实现(二)博弈树算法的描述
查看>>
Hibernate : Disabling contextual LOB creation as createClob() method threw error
查看>>
【bzoj4872】[Shoi2017]分手是祝愿 期望dp
查看>>
字符串元转分
查看>>
thinkphp 防sql注入
查看>>
201521123044 《Java程序设计》第1周学习总结
查看>>
MIT Scheme 的基本使用
查看>>
程序员的“机械同感”
查看>>
在16aspx.com上下了一个简单商品房销售系统源码,怎么修改它的默认登录名和密码...
查看>>