1、简述
该篇文章记录本人学习和使用Android过程中的关于View的各种我所不熟悉但是很有用的api,都会包含一些小的案例。
2. xml布局中重要api
2.1 clip家族属性
2.1. clipToPadding
用途与用法: 常用于RecyclerView中(默认为true),设置是否要让该view的父布局去裁剪掉该view的paddinng值。
案例分析:如下图所示假若RecyclerView的xml中设置了android:paddingTop = "10dp",clipToPadding默认为ture,即裁剪掉padding值,那么和我们日常观察的一样,就是仍然有上边距进行滑动;clipToPadding为 false ,那么之前空白的padding会顶上去的,往下拉padding又会呈现了
2.1.2 android:clipChildren
用途:允许子View超出父View
使用注意事项: 1、只需在根节点设置android:clipChildren为false即可,默认为true,
注意:一定是在布局文件的根节点设置
2、可以通过android:layout_gravity控制超出的部分如何显示。
3、android:clipChildren的意思:是否限制子View在其范围内,我们将其值设置为false后那么当子控件的高度高于父控件时也会完全显示,而不会被压缩。
题外话:和前端里面的 overflow: hidden; 有点类似,默认就是android:clipChildren = "true",很显然前端里面要想显示超出父组件的区域可以使用auto,那么相应的 android里面可以将裁剪超出内容属性置为false.
效果:左边为弹出dialog的效果,右边为xml布局中的预览效果
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:orientation="vertical"
android:clipChildren="false"
android:layout_height="wrap_content">
<!-- 注意 clipChildren 根布局 false-->
<LinearLayout
android:layout_alignParentBottom="true"
android:background="#fff"
android:orientation="vertical"
android:layout_width="match_parent"
android:clipChildren="false"
android:layout_height="wrap_content">
<!-- 注意 clipChildren = false-->
<!-- 注意 你裁剪的是哪个布局那么他的父亲布局得有该属性-->
<LinearLayout
android:id="@+id/rl_1"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="128dp">
<android.support.v7.widget.CardView
android:id="@+id/cd"
android:layout_gravity="bottom"
android:layout_marginLeft="10dp"
android:foreground="?android:attr/selectableItemBackground"
android:layout_width="120dp"
android:layout_height="150dp"
card_view:cardBackgroundColor="#FFFFFF"
card_view:cardCornerRadius="4dp"
card_view:cardElevation="2dp"
card_view:cardUseCompatPadding="true">
<ImageView
android:src="@drawable/shop"
android:scaleType="fitXY"
android:layout_width="120dp"
android:layout_height="match_parent"/>
</android.support.v7.widget.CardView>
。。。。。。。
</LinearLayout>
<LinearLayout
android:layout_marginTop="20dp"
android:layout_width="match_parent"
android:layout_height="45dp">
。。。。。。。
</LinearLayout>
</LinearLayout>
</RelativeLayout>
2.2 scrollView中的小技巧
2.2.1 android:fillViewport="true"
开发中一般都设置Linerlayout为ScrollView的唯一子布局,如果没有设置android:fillViewport=”true”,即使给Linerlayout设置了 android:layout_heightt=”match_parent”也是没有作用的,它还是会按照wrap_coent来布局,最后无法铺满全屏。加上该属性就可以让唯一子布局的match_parent生效了。
下图的右侧的3,即为如下的ScrollView包裹的,是否使用 android:fillViewport = "true",会产生如下图的差异
<ScrollView
android:fillViewport="true"
android:layout_width&