系统控件终有尽,使用自定义控件可以很好的提高代码复用量。

(源第一行代码)

Eg:标题栏

1.先在布局里新建一个布局,将标题写出。

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:layout_width="match_parent"
 4     android:layout_height="?attr/actionBarSize"   //高度取源标题栏高度,一般为50dp
 5     android:background="@drawable/title_bg">
 6 
 7     <Button
 8         android:id="@+id/title_back"
 9         android:layout_width="30dp"
10         android:layout_height="30dp"
11         android:layout_gravity="center"
12         android:layout_margin="5dp"      //android:layout_margin就是设置view的上下左右边框的额外空间
13         android:background="@drawable/back_bg" />
14 
15     <TextView
16         android:id="@+id/title_text"
17         android:layout_width="0dp"      //width为0dp一般是为下面的weight做准备。weight比例为1
18         android:layout_height="wrap_content"
19         android:layout_gravity="center"
20         android:layout_weight="1"
21         android:gravity="center"
22         android:text="Title text"
23         android:textColor="#fff"
24         android:textSize="24sp"/>      //dp为绝对大小,sp为相对系统字体的相对大小
25 
26     <Button
27         android:id="@+id/title_edit"
28         android:layout_width="30dp"
29         android:layout_height="30dp"
30         android:layout_gravity="center"
31         android:layout_margin="5dp"
32         android:background="@drawable/exit_bg" />
33 
34 </LinearLayout>

其中包括两个按钮和一个文本显示,为布局文件。

(如单独需要引入布局,可以在activity_main.xml的LinearLayout 写入以下引入)

1 <include layout="@layout/title" />

 

2.创建自定义控件

在Java中新建一个java,命名为TitleLayout继承LinearLayout

1 public class TitleLayout extends LinearLayout {
2     public TitleLayout(Context context, AttributeSet attrs)
3     {
4         super(context, attrs);
5         LayoutInflater.from(context).inflate(R.layout.title,this);    //inflate动态加载一个布局文件
6     }
7 }

自定义控件创建好后,需要布局文件中添加自定义控件。修改activity_main.xml

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent">
 5 
 6     <com.example.uicustomviews.TitleLayout      //添加时需要指明控件的完整类名,包名不可以省略
 7         android:layout_width="match_parent"
 8         android:layout_height="wrap_content"/>
 9 
10 </LinearLayout>

写控件内button事件等时,直接在TitleLayout中修改代码即可。

版权声明:本文为Mask-D原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/Mask-D/p/8782716.html