前言:
上一篇Android 5.0的文章,小编仔细学习使用了TextInputLayout和Snackbar,不清楚的可以查看原文链接,这一篇文章中将会全部介绍5.0中其它比较常用的控件,下面是目录:
- Material Dialog
- FloatingActionButton
- SwipeRefreshLayout
- LinearLayoutCompat
- ListPopupWindow
- PopupMenu
- Toolbar
- TabLayout(选项卡布局)
- AppBarLayout(程序栏布局)&& CoordinatorLayout(协作布局)
- CollapsingToolbarLayout(折叠工具栏布局)
- NestedScrollView的使用
Material Dialog
Dialog我们在开发中经常用到,但不经常使用V7包里面的Material 风格的对话框,建议以后使用这种Dialog,效果太酷了。
private void showMaterialDialog() {
android.support.v7.app.AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("我爱你 爱着你就像老鼠爱大米")
.setCancelable(false)
.setNegativeButton("取消", null)
.setPositiveButton("确定", null)
.setTitle("this is a Material Design Dialog")
.show();
}
效果如下:
FloatingActionButton(悬浮的按钮)
在android.support.design.widget包下面,可以使用FloatingActionButton来做悬浮按钮,虽然这种效果我们可以使用ImageView来实现,但谷歌给我们提供了做悬浮按钮的控件我们就不用再自己创造了,查看FloatingActionButton的源代码可以发现,此控件是继承自ImageView的,所以可是使用ImageView的一切属性,但它也有属于自己及的专有属性:
1. app:fabSize="normal"设置大小,有两种赋值分别是 “mini” 和 “normal”,默认是“normal”
2. app:borderWidth="10dp"设置边框的宽度
3. app:backgroundTint="@color/colorPrimary"设置FloatingActionButton的背景颜色,默认的背景颜色是Theme主题中的<item name="colorAccent">#ff0000</item>
4. app:elevation="20dp"设置FloatingActionButton阴影的深度
效果如下:
布局文件如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<android.support.design.widget.FloatingActionButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_margin="20dp"
app:borderWidth="5dp"
app:backgroundTintMode="src_in"
app:backgroundTint="@color/colorPrimary"
app:elevation="20dp"
/>
<android.support.design.widget.FloatingActionButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_margin="20dp"
app:fabSize="normal"
app:borderWidth="10dp"
app:elevation="20dp"
/>
<android.support.design.widget.FloatingActionButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_margin="20dp"
app:fabSize="mini"
app:borderWidth="5dp"
app:backgroundTintMode="src_in"
app:backgroundTint="@color/colorPrimary"
app:elevation="20dp"
/>
</LinearLayout>
SwipeRefreshLayout(下拉刷新)
SwipeRefreshLayout使用这种控件做出的刷新效果现在非常见,印象比较深的就是直播APP上,它是在android.support.v4.widget包下,SwipeRefreshLayout组件下必须包裹一个可滑动的组件才可实现下拉刷新效果。
布局代码如下:
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.SwipeRefreshLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/swipeContainer"
android:orientation="vertical">
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
/*这里放多个TextView来测试*/
</LinearLayout>
</ScrollView>
</android.support.v4.widget.SwipeRefreshLayout>
java程序:
public class SwipeRefreshActivity extends AppCompatActivity implements SwipeRefreshLayout.OnRefreshListener {
SwipeRefreshLayout swipeContainer;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_swiprefresh);
swipeContainer = (SwipeRefreshLayout) findViewById(R.id.swipeContainer);
//设置下拉刷新监听事件
swipeContainer.setOnRefreshListener(this);
//设置进度条的颜色
swipeContainer.setColorSchemeColors(Color.RED, Color.BLUE, Color.GREEN);
//设置圆形进度条大小
swipeContainer.setSize(SwipeRefreshLayout.DEFAULT);
//设置进度条背景颜色
// swipeContainer.setProgressBackgroundColorSchemeColor(Color.DKGRAY);
//设置下拉多少距离之后开始刷新数据
// swipeContainer.setDistanceToTriggerSync(50);
}
@Override
public void onRefresh() {
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
Snackbar.make(swipeContainer, "刷新结束", Snackbar.LENGTH_SHORT).show();
swipeContainer.setRefreshing(false);
}
}, 2000);
}
}
SwipeRefreshLayout的一些常用的设置都写在代码中了,在不设置进度条颜色的时候默认是黑色的,SwipeRefreshLayout只有下拉刷新的功能,但在实际开发中还需要上拉加载功能,这都可以去Github上search 。
效果如下:
LinearLayoutCompat
V7包中有一个LinearLayoutCompat组件,可以给LinerLayout 中的子元素item之间设置分割线。
布局文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<!--divider必须放在drawable中才能生效-->
<android.support.v7.widget.LinearLayoutCompat
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
app:divider="@drawable/line"
app:dividerPadding="10dp"
app:showDividers="middle"
>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#ffffff"
android:gravity="center"
android:padding="10dp"
android:text="text"
android:textAllCaps="false"
android:textColor="@color/colorAccent"
android:textSize="14sp"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#ffffff"
android:gravity="center"
android:padding="10dp"
android:text="text"
android:textAllCaps="false"
android:textColor="@color/colorAccent"
android:textSize="14sp"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#ffffff"
android:gravity="center"
android:padding="10dp"
android:text="text"
android:textAllCaps="false"
android:textColor="@color/colorAccent"
android:textSize="14sp"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#ffffff"
android:gravity=