再做一个项目的时候,要求标题栏的标题再中间,样式,字体大小都要自定义。左边一个返回按钮,一个关闭按钮,右边定义一个提交按钮,有时候显示有时候隐藏。因为原生的title标题是再左边的,然后去给Titlebar设置自定义View的时候,也会不尽人意,标题不是再正中间的,标题栏太高等问题。

我们要求的是这样的,右边的按钮可以显示或者隐藏。
于是就决定自己写一个BaseActivity,所有的都去继承这个基类,然后自己去定义标题栏的样式就可以就可以了。
下面来讲一下这个界面是怎么实现的:
首先定义一个类BaseActivity:
public class BaseActivity extends AppCompatActivity implements View.OnClickListener{
private TextView mTitleTextView;//标题
private TextView close_tv;//
protected TextView commint_tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().requestFeature(Window.FEATURE_NO_TITLE);
//将界面加入到栈中,方便管理
MyApplication.getInstance().addActivity(this);
initViews();
}
private void initViews() {
super.setContentView(R.layout.activity_abstract_title);
mTitleTextView = (TextView) findViewById(R.id.action_bar_title_tv);
mContentLayout = (FrameLayout) findViewById(R.id.layout_content);
close_tv = ((TextView) findViewById(R.id.action_bar_close_tv));
ImageView back_ic = (ImageView) findViewById(R.id.action_bar_back_iv);
commint_tv = (TextView) findViewById(R.id.action_bar_comint_tv);
back_ic.setOnClickListener(this);
mTitleTextView.setOnClickListener(this);
}
// 返回键返回事件
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (KeyEvent.KEYCODE_BACK == keyCode) {
onBackPressed();
}
return super.onKeyDown(keyCode, event);
}
public boolean onTouchEvent(MotionEvent event) {
if(null != this.getCurrentFocus()){
/**
* 点击空白位置 隐藏软键盘
*/
InputMethodManager mInputMethodManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
return mInputMethodManager.hideSoftInputFromWindow(this.getCurrentFocus().getWindowToken(), 0);
}
return super .onTouchEvent(event);
}
/**
* 显示关闭按钮
*/
public void showCloseBT(){
if (close_tv!=null){
close_tv.setVisibility(View.VISIBLE);
close_tv.setOnClickListener(this);
}
}
/**
* 显示提交按钮按钮
*/
public void showCommintBT(String s){
if (commint_tv!=null){
commint_tv.setVisibility(View.VISIBLE);
commint_tv.setOnClickListener(this);
commint_tv.setText(s);
}
}
/**
* 返回按钮点击后触发
*/
protected void onLeftBackward() {
onBackPressed();
}
/**
* 右边提交按钮点击后触发
*/
protected void onRightForward() {
}
/**
* 提交关闭按钮点击后触发
*/
protected void onLeftCloseword(){
Intent intent = new Intent(this, MainActivity.class);
intent.putExtra("tabpos", 2);
startActivity(intent);
finish();
}
//设置标题内容
@Override
public void setTitle(int titleId) {
mTitleTextView.setText(titleId);
}
//设置标题内容
@Override
public void setTitle(CharSequence title) {
mTitleTextView.setText(title);
}
//点击标题时出发的事件操作
public void onTitle() {
}
//取出FrameLayout并调用父类removeAllViews()方法
@Override
public void setContentView(int layoutResID) {
mContentLayout.removeAllViews();
View.inflate(this, layoutResID, mContentLayout);
onContentChanged();
}
@Override
public void setContentView(View view){
mContentLayout.removeAllViews();
mContentLayout.addView(view);
onContentChanged();
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.action_bar_back_iv:
onLeftBackward();
break;
case R.id.action_bar_comint_tv:
onRightForward();
break;
case R.id.action_bar_close_tv:
onLeftCloseword();
case R.id.action_bar_title_tv:
onTitle();
default:
break;
}
}
}
这样的话别的Activity去继承BaseActivity的时候,只需要去设置是否显示某个按钮即可,标题栏各个按钮的点击事件不需要去设置,直接重写
onLeftBackward();onRightForward();onRightForward();onTitle();
然后对应各自的方法就可以了。
下面给出布局文件activity_abstract_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="match_parent"
android:orientation="vertical" >
<!-- Title -->
<include layout="@layout/actionbar_layout" />
<FrameLayout
android:id="@+id/layout_content"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#fff" >
</FrameLayout>
</LinearLayout>
actionbar_layout.xml文件
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/layout_titlebar"
android:layout_width="match_parent"
android:layout_height="40dp"
android:background="#2B2B2B">
<TextView
android:id="@+id/action_bar_title_tv"
android:layout_width="180dp"
android:layout_height="match_parent"
android:ellipsize="marquee"
android:gravity="center_horizontal|center"
android:lines="1"
android:textColor="#fff"
android:focusable="true"
android:marqueeRepeatLimit="marquee_forever"
android:layout_centerInParent="true"
android:focusableInTouchMode="true"
android:scrollHorizontally="true"
android:textSize="18sp" />
<ImageView
android:contentDescription="@string/cancel"
android:id="@+id/action_bar_back_iv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:padding="10dp"
android:textSize="15sp"
android:textStyle="bold"
android:textColor="#fff"
android:src="@drawable/arrow_left" />
<TextView
android:layout_toEndOf="@id/action_bar_back_iv"
android:text="@string/action_bar_close"
android:id="@+id/action_bar_close_tv"
android:textColor="#fff"
android:visibility="invisible"
android:textSize="15sp"
android:textStyle="bold"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:padding="10dp"/>
<TextView
android:visibility="invisible"
android:padding="10dp"
android:layout_alignParentEnd="true"
android:text="@string/action_bar_commint"
android:id="@+id/action_bar_comint_tv"
android:textSize="15sp"
android:textColor="#fff"
android:textStyle="bold"
android:layout_marginEnd="3dp"
android:layout_width="wrap_content"
android:layout_height="match_parent" />
</RelativeLayout>
下面是一个简单的应用:
public class DemoActivity extends MyBaseActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setTitle("APPBaseActivity");//设置标题
showCloseBT();//显示关闭按钮,默认时隐藏的
}
//如果返回按钮有其他操作的话可以重写
@Override
protected void onLeftBackward() {
super.onLeftBackward();
//里面写事件就可以
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# Android
# BaseActivity
# 标题栏
# Android自定义简单的顶部标题栏
# Android自定义顶部标题栏
# Android Studio实现标题栏和状态栏的隐藏
# Android标题栏最右边添加按钮的实例
# Android 使用CoordinatorLayout实现滚动标题栏效果的实例
# Android中隐藏状态栏和标题栏的方法汇总(隐藏状态栏、标题栏的五种方法)
# android开发去除标题栏的方法
# 就可以
# 要去
# 自定义
# 重写
# 的是
# 是一个
# 也会
# 都要
# 是怎么
# 只需
# 不尽人意
# 不需
# 再做
# 都去
# 大家多多
# 去给
# 这样的话
# 正中间
# FrameLayout
相关文章:
制作表格网站有哪些,线上表格怎么弄?
建站之星体验版:智能建站系统+响应式设计,多端适配快速建站
内部网站制作流程,如何建立公司内部网站?
制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?
如何设置并定期更换建站之星安全管理员密码?
开源网站制作软件,开源网站什么意思?
建站之星如何快速解决建站难题?
Android滚轮选择时间控件使用详解
如何解决VPS建站LNMP环境配置常见问题?
模具网站制作流程,如何找模具客户?
太原网站制作公司有哪些,网约车营运证查询官网?
如何在IIS中新建站点并解决端口绑定冲突?
如何快速生成ASP一键建站模板并优化安全性?
如何高效完成独享虚拟主机建站?
建站与域名管理如何高效结合?
ppt制作免费网站有哪些,ppt模板免费下载网站?
如何用已有域名快速搭建网站?
建站之星五站合一营销型网站搭建攻略,流量入口全覆盖优化指南
金*站制作公司有哪些,金华教育集团官网?
简历在线制作网站免费,免费下载个人简历的网站是哪些?
为什么Go需要go mod文件_Go go mod文件作用说明
如何快速查询域名建站关键信息?
建站主机选购指南与交易推荐:核心配置解析
网站好制作吗知乎,网站开发好学吗?有什么技巧?
建站之星如何实现PC+手机+微信网站五合一建站?
建站之星图片链接生成指南:自助建站与智能设计教程
建站之星代理费用多少?最新价格详情介绍
齐河建站公司:营销型网站建设与SEO优化双核驱动策略
如何选择CMS系统实现快速建站与SEO优化?
建站中国必看指南:CMS建站系统+手机网站搭建核心技巧解析
如何在云主机上快速搭建网站?
大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?
如何制作网站标识牌,动态网站如何制作(教程)?
如何通过服务器快速搭建网站?完整步骤解析
Android使用GridView实现日历的简单功能
七夕网站制作视频,七夕大促活动怎么报名?
如何选择高效响应式自助建站源码系统?
洛阳网站制作公司有哪些,洛阳的招聘网站都有哪些?
制作网站的网址是什么,请问后缀为.com和.com.cn还有.cn的这三种网站是分别是什么类型的网站?
如何彻底删除建站之星生成的Banner?
如何登录建站主机?访问步骤全解析
如何获取免费开源的自助建站系统源码?
网站专业制作公司有哪些,做一个公司网站要多少钱?
如何在云虚拟主机上快速搭建个人网站?
制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?
logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?
已有域名和空间如何快速搭建网站?
网站制作模板下载什么软件,ppt模板免费下载网站?
独立制作一个网站多少钱,建立网站需要花多少钱?
学校为何禁止电信移动建设网站?
*请认真填写需求信息,我们会在24小时内与您取得联系。