您的位置:首页 > 其它

如何自定义一个自己的标题栏

2017-03-17 08:54 309 查看
在android中我们会发现很多的软件的头部或者底部会有一部分的样式是不改变的,例如苹果手机没有实体返回按键,就只能真实用虚拟的按键来实现,在android系统中,我们同样可以实现这个功能。

首先,我们来看看怎么实现最简单的,首先我们要先建立一个activity_title_all.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="50dp"
android:background="@drawable/title_bg"
android:orientation="horizontal">

<Button
android:id="@+id/title_back"
android:layout_width="60dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_margin="5dp"
android:layout_weight="1"
android:background="@drawable/button"
android:text="Back"
android:textAllCaps="false" />

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_weight="3"
android:gravity="center"
android:text="Title Text"
android:textColor="#ffffff"
android:textSize="30sp" />

<Button
android:id="@+id/title_edit"
android:layout_width="60dp"
andr
10c43
oid:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_margin="5dp"
android:layout_weight="1"
android:background="@drawable/button"
android:text="Edit"
android:textAllCaps="false" />

</LinearLayout>




然后在主活动的布局文件中加入下面这句话

之后就会发现主活动的视图中出现了这个标题栏,当我们把这个程序下载到手机中的时候,我们会发现界面上其实是有两个标题栏的,一个是系统的,一个使我们自己的,所以为了让系统的隐藏起来,我们要在主活动布局文件对应断电java文件中添加下面的代码

ActionBar actionBar = getSupportActionBar();
if(actionBar != null){
actionBar.hide();
}


这里使用getSupportActionBar()方法来获取一个ActionBar的示例,然后用ActionBar的hide()方法把标题栏隐藏起来。

下面我们再运行就会发现就我们自己的标题栏了。

同时还有一个问题,当我们想要在我们的标题控件中的按钮中添加相关的功能的时候,我们会发现我们要再很多文件中添加相同的代码去增加标题栏中按钮的功能。

为了解决这个问题,我们可以使用这样的方法,先新建一个TitleLyout类,让它继承于LinearLayout,然后重写其中的方法

代码如下:

package com.example.android.li.text_activity;

import android.app.Activity;
import android.content.Context;
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.text.AttributedCharacterIterator;

/**
* Created by Administrator on 2017/3/17.
*/

public class TitleLayout extends LinearLayout {
public TitleLayout(Context context, AttributeSet attrs) {
super(context, attrs);
LayoutInflater.from(context).inflate(R.layout.activity_title_all, 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 Edit Button", Toast.LENGTH_LONG).show();
}
});
}
}


然后我们我们在相关的想要加入标题的布局文件中加入下面的代码

<com.example.android.li.text_activity.TitleLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"/>


然后在java文件中加入上面的隐藏系统标题的代码就可以了。

下面是完整的代码

activity_main.xml的代码:

<?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:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.android.li.text_activity.MainActivity">

<com.example.android.li.text_activity.TitleLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"/>

<Button
android:id="@+id/button_main"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Go to" />

</LinearLayout>


activity_test_.xml的代码

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_test_"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.android.li.text_activity.Test_Activity">

<com.example.android.li.text_activity.TitleLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"/>

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="wwwwwww"
android:textSize="50sp"/>

</LinearLayout>


activity_title_all的代码:

<?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="50dp"
android:background="@drawable/title_bg"
android:orientation="horizontal">

<Button
android:id="@+id/title_back"
android:layout_width="60dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_margin="5dp"
android:layout_weight="1"
android:background="@drawable/button"
android:text="Back"
android:textAllCaps="false" />

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_weight="3"
android:gravity="center"
android:text="Title Text"
android:textColor="#ffffff"
android:textSize="30sp" />

<Button
android:id="@+id/title_edit"
android:layout_width="60dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_margin="5dp"
android:layout_weight="1"
android:background="@drawable/button"
android:text="Edit"
android:textAllCaps="false" />

</LinearLayout>


MainActivity的代码:

package com.example.android.li.text_activity;

import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.support.v7.app.ActionBar;
import android.support.v7.app.ActionBar.LayoutParams;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.Toast;

import static android.os.Build.VERSION_CODES.M;
import static android.widget.ImageView.ScaleType.CENTER_INSIDE;

public class MainActivity extends AppCompatActivity{

private Button button;
private ImageView imageView;
private ProgressBar progressBar;
private ProgressDialog progressDialog;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ActionBar actionBar = getSupportActionBar(); if(actionBar != null){ actionBar.hide(); }
button = (Button) findViewById(R.id.button_main);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, Test_Activity.class);
startActivity(intent);
}
});

}
}


Test_Activity中的代码

package com.example.android.li.text_activity;

import android.support.v4.app.NotificationCompat;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

import static android.os.Build.VERSION_CODES.N;

public class Test_Activity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test_);
ActionBar actionBar = getSupportActionBar(); if(actionBar != null){ actionBar.hide(); }
}
}


TitleLayout中的代码:

package com.example.android.li.text_activity;

import android.app.Activity;
import android.content.Context;
import android.support.v7.app.ActionBar;
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.text.AttributedCharacterIterator;

/**
* Created by Administrator on 2017/3/17.
*/

public class TitleLayout extends LinearLayout {
public TitleLayout(Context context, AttributeSet attrs) {
super(context, attrs);
LayoutInflater.from(context).inflate(R.layout.activity_title_all, 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 Edit Button", Toast.LENGTH_LONG).show();
}
});
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: