系统控件终有尽,使用自定义控件可以很好的提高代码复用量。
(源第一行代码)
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中修改代码即可。
转载于:https://www.cnblogs.com/Mask-D/p/8782716.html