1.定义
用系统自带的控件重新组合或者自定义类继承View或者自定义类继承ViewGroup,实现特定的UI效果。作用:方便复用,并且所有功能被封装在控件中,高内聚,低耦合。
2.各控件继承关系
3.View和ViewGroup
View是所有UI组件的基类,ViewGroup是容纳View及其派生类的容器。
UI的层次布局:
4.代码
1.新建布局类,并设置一些修改方法便于外部调用来对这个布局进行修改
public class TitleLayout extends LinearLayout {
private TextView title_view;
public TitleLayout(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
LayoutInflater.from(context).inflate(R.layout.layout_title,this);
title_view=findViewById(R.id.title_view);
//在布局中引入TitleLayout控件就会调用该构造函数。该构造函数需要对layout_title进行动态加载。
//inflat有两个参数,一个是布局的id,另一个是布局的父布局,这里是TitleLayout,所以传入this
}
public void setData(String string){
title_view.setText(string);
}
}
2.相关布局
(1)自定义控件的布局
<?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">
<TextView
android:id="@+id/title_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="title"
android:layout_gravity="center_horizontal"
/>
<Button
android:id="@+id/button_View"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="title"
/>
</LinearLayout>
(2)main布局
<?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"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:orientation="vertical"
>
<com.example.demolist.TitleLayout
android:layout_height="wrap_content"
android:layout_width="wrap_content"/>
</LinearLayout>
3.mainActivity代码
public class MainActivity extends AppCompatActivity {
private ProgressBar progressBar;
private Button button;
private TitleLayout titleLayout;
@Override
protected void onCreate (Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
titleLayout=new TitleLayout(this,null);
titleLayout.setData("123");
}
}