继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

如何写一个app通用的title

nickcau
关注TA
已关注
手记 114
粉丝 6509
获赞 303

我先上xml:

<?xml version="1.0" encoding="utf-8"?>
<merge
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="@dimen/title_height">
    <!-- 图标  -->
    <ImageView
        android:id="@+id/baselayout_iv_left"
        android:layout_width="wrap_content"
        android:layout_centerVertical="true"
        android:scaleType="center"
        style="@style/title_bar_common_style"
        android:src="@drawable/nav_btn_back" />

    <TextView
        android:id="@+id/baselayout_tv_title"
        android:layout_centerInParent="true"
        android:gravity="center"
        android:singleLine="true"
        android:maxWidth="240dip"
        android:text="@string/app_name"
        style="@style/title_bar_common_style"
        android:textColor="@color/white_a"
        android:textSize="@dimen/text_size_20" />

    <ImageView
        android:id="@+id/baselayout_iv_right"
        android:layout_width="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_centerVertical="true"
        android:scaleType="center"
        style="@style/title_bar_common_style"
        tools:visibility="visible"
        android:visibility="gone" />

    <!-- 文字 -->
    <TextView
        android:id="@+id/baselayout_tv_left"
        android:gravity="center"
        android:maxWidth="240dip"
        android:singleLine="true"
        style="@style/title_bar_common_style"
        android:textColor="@color/white_a"
        android:textSize="@dimen/text_size_16"
        android:visibility="gone"
        tools:visibility="visible"/>

    <TextView
        android:id="@+id/baselayout_tv_right_yunqi"
        android:layout_alignParentRight="true"
        android:gravity="right|center_vertical"
        android:maxWidth="240dip"
        android:singleLine="true"
        style="@style/title_bar_common_style"
        android:textColor="@color/white_a"
        android:textSize="@dimen/text_size_16"
        android:visibility="visible" />

</merge>

然后上代码:

public class TitleBarCommon extends RelativeLayout {
    private TextView mTvTitle, mTvLeft, mTvRight;
    private ImageView mIvLeft, mIvRight;
    private View mTitleContainer;
    private Context context;

    public TitleBarCommon(Context context) {
        this(context, null);

    }

    public TitleBarCommon(Context context, AttributeSet attrs) {
        super(context, attrs);
        this.context = context;
        this.mTitleContainer = LayoutInflater.from(context).inflate( R.layout.activity_base_header_common, this,true);
        init();
    }


    public void init() {
        mTvTitle = (TextView) mTitleContainer.findViewById(R.id.baselayout_tv_title);
        mIvLeft = (ImageView) mTitleContainer.findViewById(R.id.baselayout_iv_left);
        mTvLeft = (TextView) mTitleContainer.findViewById(R.id.baselayout_tv_left);
        mIvRight = (ImageView) mTitleContainer.findViewById(R.id.baselayout_iv_right);
        mTvRight = (TextView) mTitleContainer.findViewById(R.id.baselayout_tv_right_yunqi);
    }

    private LayoutInflater mLayoutInflater;
    public void setLayoutInflater(LayoutInflater inflater){
        mLayoutInflater = inflater;
    }
    /**自定义头部**/
    public void setCustomTitleBar(int customTitleLayoutId){
        if (customTitleLayoutId <=0) {
            this.setVisibility(View.GONE);
            return ;
        }
        removeAllViews();
        View baseHead;
        if(mLayoutInflater!=null){
            baseHead = mLayoutInflater.inflate(customTitleLayoutId, null);
        }else{
            baseHead = View.inflate(context,customTitleLayoutId, null);
        }
        RelativeLayout.LayoutParams params=new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.MATCH_PARENT);
        addView(baseHead,params);
    }

    /**自定义头部**/
    public void setCustomTitleBar(View baseHead){
        if (baseHead == null) {
            this.setVisibility(View.GONE);
            return ;
        }
        removeAllViews();
//        View baseHead = View.inflate(context,customTitleLayoutId, null);
        LayoutParams params=new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.MATCH_PARENT);
        addView(baseHead,params);
    }

    /**
     * 右TextView 文字
     *
     * @param
     * @return
     */
    public TitleBarCommon setRightTextViewString(String text) {
        if (!TextUtils.isEmpty(text)) {
            mTvRight.setText(text);
            mTvRight.setVisibility(View.VISIBLE);
        } else {
            mTvRight.setVisibility(View.GONE);
        }
        return this;
    }

    /**
     * 设置右TextView点击事件
     *
     * @param lsnr
     * @return
     */
    public TitleBarCommon setRightTextViewListener(OnClickListener lsnr) {
        mTvRight.setOnClickListener(lsnr);
        return this;
    }

}

这样使用这个title,我们看一个activity的layout:

<?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"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent"
              android:background="@color/white_a"
              xmlns:tools="http://schemas.android.com/tools"
              android:orientation="vertical">

    <com.pic.optimize.view.TitleBarCommon
        android:id="@+id/head_common_layout"
        android:layout_width="match_parent"
        android:layout_height="44dp"
        android:background="@color/red_bn"
        android:gravity="center_vertical"/>

    <ListView
        android:id="@+id/news_home_listview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:divider="@null"
        android:fadingEdge="none"
        android:footerDividersEnabled="true"
        android:listSelector="@color/trans_color"
        android:scrollbars="none"
        android:scrollingCache="false" />

</LinearLayout>
private void initTitle() {
    TitleBarCommon titleBarCommon = (TitleBarCommon)findViewById(R.id.head_common_layout);
    titleBarCommon.setRightTextViewString("增加");
    titleBarCommon.setRightTextViewListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Toast.makeText(TestHttpActivity.this,"aaa",Toast.LENGTH_LONG).show();
        }
    });
}

从这个代码可以看出几个有意思的地方,因为这个view本身继承RelateviewLayout,所以根节点为merge,这样可以少一层嵌套

还有看一下方法setCustomTitleBar,这个方法去除了这个view本身的layout,然后可以set自己的layout,就有很大的通用性

代码在:https://github.com/nickgao1986/StepSport

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP