activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <!--<!–通过一行 include 语句引入title布局–>--> <!--<include layout="@layout/title"/>--> <!-- 创建自定义控件② 在布局文件中添加这个自定义控件 这是需要指明控件的完整类名,包名在这里是不可省略的 --> <com.example.administrator.uicustomviews.TitleLayout android:layout_width="match_parent" android:layout_height="wrap_content"/> </android.support.constraint.ConstraintLayout>
MainActivity.java
package com.example.administrator.uicustomviews; import android.support.v7.app.ActionBar; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //将系统自带的标题栏隐藏掉 ActionBar actionBar = getSupportActionBar(); //getSupportActionBar():调用这个方法来获得ActionBar的实例 if (actionBar != null) { actionBar.hide(); //hide():将标题栏隐藏起来 } } }
title.xml
<?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="wrap_content" android:background="@drawable/title_bg"> <!-- android:background:为布局或控件指定一个背景,可以用颜色或图片进行填充 --> <Button android:id="@+id/title_back" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_margin="5dp" android:background="@drawable/back_bg" android:text="Back" android:textColor="#fff" /> <!-- android:layout_margin:可以指定控件在上下左右方向上便宜的距离 当然也可以使用android:layout_marginLeft或android:layout_marginTop等属性单独指定某个方向 --> <TextView android:id="@+id/title_text" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_weight="1" android:gravity="center" android:text="标题" android:textColor="#fff" android:textSize="24sp" /> <Button android:id="@+id/title_edit" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_margin="5dp" android:background="@drawable/edit_bg" android:text="Edit" android:textColor="#fff" /> </LinearLayout>
TitleLayout.java
package com.example.administrator.uicustomviews; import android.app.Activity; import android.content.Context; import android.support.v7.app.ActionBar; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.text.Layout; import android.util.AttributeSet; import android.view.LayoutInflater; import android.view.View; import android.widget.Button; import android.widget.LinearLayout; import android.widget.Toast; import java.util.jar.Attributes; //创建自定义控件① //新建TitleLayout继承自LinearLayout,让他成为我们自定义的标题栏控件 public class TitleLayout extends LinearLayout { public TitleLayout(Context context, AttributeSet attrs) { super(context, attrs); LayoutInflater.from(context).inflate(R.layout.title,this); //from():通过LayoutInflater的from()方法可以构建出一个LayoutInflater对象 //inflate():调用inflate()方法可以动态加载一个布局文件,inflate()方法接收两个参数 //1.要加载的布局文件的id,这里我们传入R.layout.title //2.给加载好的布局在添加一个父布局,这里我们制定为TitleLayout,于是直接传入this Button titleBack = (Button) findViewById(R.id.title_back); Button titleEdit = (Button) findViewById(R.id.title_edit); titleBack.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Toast.makeText(getContext(),"你点了退出按钮!", Toast.LENGTH_SHORT).show(); ((Activity) getContext()).finish(); } }); titleEdit.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Toast.makeText(getContext(),"你点了编辑按钮!", Toast.LENGTH_SHORT).show(); } }); } }