乐趣区

关于android:Android的rippleSpacemergeincludeViewStub标签的使用

Android 的 ripple,Space,merge,include,ViewStub 标签的应用

1.Android5.0 ripple 标签
在 Android 5.0 后退出 ripple 标签,应用这个 Drawable 做控件的背景,在点击的时候就能够达到波浪成果。
ripple 标签对应是一个 rippleDrawable, 当应用它作为背景的时候,在控件按上来的时候,就是显示水波成果。
在 res 目录下的 drawable 目录下创立 ripple 标签

ripple 次要有两种模式
1. 没有边界的 ripple
这种没有边界的 ripple 只须要设置 ripple color 属性就行了,不必给他增加 item

<ripple xmlns:android="http://schemas.android.com/apk/res/android"
 android:color="@color/bg_press">
</ripple>

2. 有边界的 ripple
这种有边界的须要给 ripple 增加一个 item,item 能够是图片,纯色彩,shape,selector.

<ripple xmlns:android="http://schemas.android.com/apk/res/android"
 android:color="@color/bg_press">
 <!--Android 5.0 退出的,点击时候能够达到波浪成果 -->
 <item android:drawable="@drawable/bg_my_right" />// 这是一个 shape
</ripple>

留神:如果想控件在不被点击的时候背景不显示,这个时候须要给 item 设置 id=@android:id/mask 否则控件的背景就是 item 的资源了
在 5.0 之前 forground = ?attr/selectableItemBackground 能够实现波纹成果
2.Android 的 Space 标签
Android Space 标签是 Android4.0 增加,是一个轻量级的 View,个别用于宰割组件,布局或者在组件布局之间产生距离。

<Space
 android:layout_width="0dp"
 android:layout_height="0dp"
 android:layout_weight="1" />

3.Android 的 include 标签
创立一个 include_test 布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:orientation="vertical">
 <TextView android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:text="我是 include 标签"/>
</LinearLayout>

应用 include 标签引入布局文件达到共享雷同布局文件

<include
 android:id="@+id/my_include"
 layout="@layout/include_test"// 通过 layout 来引入布局文件
 android:layout_width="wrap_content"
 android:layout_height="wrap_content" />

4.Android 的 merge 标签
1.merge 标签可用于缩小视图层级来优化布局能够配合 include 应用
2.<merge/> 只能够作为 xml layout 的根节点, 创立一个 merge_test 布局

<merge xmlns:android="http://schemas.android.com/apk/res/android">
 <TextView android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:text="我是 merge 标签"/>
</merge>

3.. 当须要 inflate 的 xml layout 自身是由 merge 作为根节点的话,须要将被导入的 xml layout 置于 viewGroup 中,同时须要设置 attachToRoot 为 True。


 // 必须 attachToRoot 为 true
 View view = LayoutInflater.from(context).inflate(R.layout.merge_test, this, true);

3. 毛病:跟布局 merge 不能设置 padding(设置的 padding 不起作用),能够把设置在跟布局的 padding 设置到代码;不能够设置固定值的宽高

<merge 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="280dp"
    android:paddingLeft="12dp"
    android:paddingRight="12dp"
    android:paddingTop="10dp"
    android:paddingBottom="10dp">
    //layout_height="280dp" 和:paddingLeft="12dp" 这些都不会起作用,须要在代码中设置;

5.Android 的 ViewStub 标签
ViewStub 标签按需加载,顾名思议须要的时候再去加载,不须要的时候能够不必加载,节约内存应用
通常状况下会应用 setVisibility 办法来管制视图的显示和暗藏,然而这种状况视图曾经加载了。
创立一个 stub_test 布局

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="match_parent"
 android:layout_height="match_parent">
 <TextView android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:text="我是 ViewStub 标签"/>
</LinearLayout>

应用 ViewStub 标签加载 stub_test 布局
动态界面没有显示只有调用才会显示

<ViewStub
 android:id="@+id/viewstub"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:layout="@layout/stub_test"/>

留神:ViewStub 的 inflate()办法只能被调用一次,一旦调用后,ViewStub 将从视图中移除,被对应的 layout 布局取代,同时会保留 ViewStub 上设置的属性成果

ViewStub viewstub = findViewById(R.id.viewstub);
viewstub.inflate();
退出移动版