一.在一个活动中设计自己的标题栏
1. 首先res-layout-新建一个叫title的XML,并提前准备好按钮的背景图片
2.在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="55dp"
android:background="@drawable/anniu"
>
<Button
android:id="@+id/title_back"
android:layout_width="90dp"
android:layout_height="55dp"
android:layout_gravity="center"
android:layout_margin="5dp"
android:background="@drawable/anniu"
android:text="Back"
android:textColor="#f9f9fa" />
<TextView
android:id="@+id/title_text"
android:layout_width="match_parent"
android:layout_height="55dp"
android:layout_gravity="center"
android:layout_weight="1"
android:background="@drawable/anniu"
android:gravity="center"
android:text="TitleText"
android:textColor="#1be42c"
android:textSize="24sp" />
<Button
android:id="@+id/title_edit"
android:layout_gravity="center"
android:text="Edit"
android:textColor="#f9f9fa"
android:layout_margin="5dp"
android:background="@drawable/anniu"
android:layout_width="90dp"
android:layout_height="55dp" />
</LinearLayout>
3.将标题栏布局引入即在activity_main中修改
<android.support.constraint.ConstraintLayout 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">
<include layout="@layout/title"/>//添加进来
4. 最后别忘了把Mainactivity中将系统自带的标题栏隐藏掉
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ActionBar actionBar = getSupportActionBar();
if(actionBar != null){
actionBar.hide();
}
}
二. 将标题栏实现功能
上文中我们写得标题栏并没有实现功能,在这里我们要考虑除了在这个活动中实现标题栏的功能其他活动我们也要实现,所以为了避免重复代码我们在这里新建一个类,在我理解就是写一个模板,哪个活动需要它就把它添加到哪个活动中
新建一个类如图:new-javaClass-名字叫TitleLayout
在TitliLayout中添加代码:
public class TitleLayout extends LinearLayout {
public TitleLayout(Context context, AttributeSet attrs) {
super(context,attrs);
LayoutInflater.from(context).inflate(R.layout.title,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) {
((Activity)getContext()).finish();
}
});
titleEdit.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getContext(),"You clicked it",Toast.LENGTH_SHORT).show();
}
});
}
}
然后将这个类添加到activity_main.xml中,代码如图,记得把之前的<include那行删去
<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.dell.uicustomviews.TitleLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
运行就可以实现标题栏功能了
三. 将Actionbar普及到每个活动
如果又有一个新活动创建,只需要在相应的活动的中加上
<com.example.dell.uicustomviews.TitleLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
以及在相应的函数中将系统自带的标题栏隐藏即可
ActionBar actionBar = getSupportActionBar();
if(actionBar != null){
actionBar.hide();
}
如图:我在主函数中加入点击事件会跳到第二个活动
点击后:第二个活动中: