Android中BaseActivity自定义标题栏

Android中BaseActivity自定义标题栏,第1张

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

再做一个项目的时候,要求标题栏的标题再中间,样式,字体大小都要自定义。左边一个返回按钮,一个关闭按钮,右边定义一个提交按钮,有时候显示有时候隐藏。因为原生的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自定义标题栏所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1147154.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存