Android中BaseActivity自定义标题栏
程序员文章站
2023-12-21 20:56:28
再做一个项目的时候,要求标题栏的标题再中间,样式,字体大小都要自定义。左边一个返回按钮,一个关闭按钮,右边定义一个提交按钮,有时候显示有时候隐藏。因为原生的title标题是...
再做一个项目的时候,要求标题栏的标题再中间,样式,字体大小都要自定义。左边一个返回按钮,一个关闭按钮,右边定义一个提交按钮,有时候显示有时候隐藏。因为原生的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编程中自定义dialog用法实例
-
Android实现自定义标题栏的方法
-
Android中隐藏状态栏和标题栏的方法汇总(隐藏状态栏、标题栏的五种方法)
-
Android开发之多线程中实现利用自定义控件绘制小球并完成小球自动下落功能实例
-
Android中关于自定义相机预览界面拉伸问题
-
详解 Android中Libgdx使用ShapeRenderer自定义Actor解决无法接收到Touch事件的问题
-
Android 中自定义ContentProvider与ContentObserver的使用简单实例
-
Android 自定义标题栏背景