如何自定义一个自己的标题栏
2017-03-17 08:54
309 查看
在android中我们会发现很多的软件的头部或者底部会有一部分的样式是不改变的,例如苹果手机没有实体返回按键,就只能真实用虚拟的按键来实现,在android系统中,我们同样可以实现这个功能。
首先,我们来看看怎么实现最简单的,首先我们要先建立一个activity_title_all.xml的布局文件,然后在里面编辑一个界面,代码如下所示:
然后在主活动的布局文件中加入下面这句话
之后就会发现主活动的视图中出现了这个标题栏,当我们把这个程序下载到手机中的时候,我们会发现界面上其实是有两个标题栏的,一个是系统的,一个使我们自己的,所以为了让系统的隐藏起来,我们要在主活动布局文件对应断电java文件中添加下面的代码
这里使用getSupportActionBar()方法来获取一个ActionBar的示例,然后用ActionBar的hide()方法把标题栏隐藏起来。
下面我们再运行就会发现就我们自己的标题栏了。
同时还有一个问题,当我们想要在我们的标题控件中的按钮中添加相关的功能的时候,我们会发现我们要再很多文件中添加相同的代码去增加标题栏中按钮的功能。
为了解决这个问题,我们可以使用这样的方法,先新建一个TitleLyout类,让它继承于LinearLayout,然后重写其中的方法
代码如下:
然后我们我们在相关的想要加入标题的布局文件中加入下面的代码
然后在java文件中加入上面的隐藏系统标题的代码就可以了。
下面是完整的代码
activity_main.xml的代码:
activity_test_.xml的代码
activity_title_all的代码:
MainActivity的代码:
Test_Activity中的代码
TitleLayout中的代码:
首先,我们来看看怎么实现最简单的,首先我们要先建立一个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(); } }); } }
相关文章推荐
- 如何自己实现一个可自定义业务流程步骤的工作流
- 如何自定义协议从自己的一个app打开另一个app
- 如何自定义协议从自己的一个app打开另一个app
- 如何自定义协议从自己的一个app打开另一个app
- 如何自定义协议从自己的一个app打开另一个app
- Android学习 - 小知识(读取一个已经安装的包的权限与两个Activity跳转的时,如何自定义翻页效果)
- 如何封装一个自己的mvc框架(七)
- 感悟(1)——论如何在三年内做一个成功的自己
- 如何自定义一个UIProgressView
- 如何在 React Native 中写一个自定义模块
- Android:如何自定义标题栏
- 今天来用一个例子来详细讲解下nutch当中到底是如何自定义插件的
- 如何搭建一个GitHub在自己的服务器上?
- 自定义cell中有一个button按钮,按下按钮的同时如何获得该按钮所在的行的row值
- 你也可以自己写一个可爱 & 小资风格的Android加载等待自定义View - 转
- 【jquery】如何自己开发一个简单的jquery 插件
- ASP.NET MVC:如何实现一个自己的ModelBinder?
- 网络时代如何尽量保证自己不被骗?(二)一个诈骗短信的例子
- 如何删除一个CSDN上自己上传的资源
- 一个完全的新人如何搭建自己的个人网站