再做一个项目的时候,要求标题栏的标题再中间,样式,字体大小都要自定义。左边一个返回按钮,一个关闭按钮,右边定义一个提交按钮,有时候显示有时候隐藏。因为原生的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中BaseActivity自定义标题栏所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)