您的位置:首页 > 移动开发 > Android开发

替代复杂的Actionbar

2016-07-13 17:14 309 查看
隐藏ActionBar,可以自定义一个组合控件替代

组合控件

  组合控件,顾名思义就是将一些小的控件组合起来形成一个新的控件,这些小的控件多是系统自带的控件。比如很多应用中普遍使用的标题栏控件,其实用的就是组合控件,那么下面将通过实现一个简单的标题栏自定义控件来说说组合控件的用法。

1、创建自定义标题栏的布局文件activitiy_app_title.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="50dp"
android:background="@color/colorTheme"
android:focusable="true"
android:focusableInTouchMode="true">

<ImageView
android:id="@+id/img_back"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:contentDescription="@null"
android:paddingEnd="@dimen/mdp_15"
android:paddingLeft="@dimen/mdp_10"
android:paddingRight="@dimen/mdp_15"
android:paddingStart="@dimen/mdp_10"
android:scaleType="fitCenter"
android:src="@mipmap/icon_back"
android:visibility="invisible" />

<TextView
android:id="@+id/tv_title_mid"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_gravity="center_horizontal"
android:textColor="@color/colorWhite"
android:textSize="@dimen/msp_16" />

<ImageView
android:id="@+id/img_right"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:contentDescription="@null"
android:paddingEnd="@dimen/mdp_10"
android:paddingLeft="@dimen/mdp_15"
android:paddingRight="@dimen/mdp_10"
android:paddingStart="@dimen/mdp_15"
android:scaleType="fitCenter"
android:src="@mipmap/icon_search"
android:visibility="invisible" />

<TextView
android:id="@+id/tv_title_right"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:gravity="center_vertical"
android:paddingEnd="@dimen/mdp_10"
android:paddingLeft="@dimen/mdp_15"
android:paddingRight="@dimen/mdp_10"
android:paddingStart="@dimen/mdp_15"
android:textColor="@color/colorWhite"
android:textSize="@dimen/msp_14"
android:visibility="invisible" />

</RelativeLayout>


2、在res/values/  下建立一个attrs.xml

(一共有:string,color,demension,integer,enum,reference,float,boolean,fraction,flag;不清楚的可以google一把。)

<?xml version="1.0" encoding="UTF-8"?>
<resources>
<declare-styleable name="TitleLinearLayout">
<attr name="isBack" format="boolean" />
</declare-styleable>
</resources>


3、创建一个类TitleView,继承自LinearLayout:  

package com.youpinwallet.ypw.view;

import android.app.Activity;
import android.content.Context;
import android.content.res.TypedArray;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

import com.youpinwallet.ypw.R;

/**
* Title通用布局
*
* @author Administrator
*/
public class MTitle extends LinearLayout {
private ImageView imgBack;
private TextView tvMid;
private ImageView imgRight;
private TextView tvRight;

public MTitle(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
initView(context, attrs);
}

public MTitle(Context context, AttributeSet attrs) {
super(context, attrs);
initView(context, attrs);
}

private void initView(final Context context, AttributeSet attrs) {
View title = LayoutInflater.from(context).inflate(R.layout.app_title, null);
tvMid = (TextView) title.findViewById(R.id.tv_title_mid);
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.TitleLinearLayout);
boolean isBack = a.getBoolean(R.styleable.TitleLinearLayout_isBack, false);
if (getTag() != null) {
tvMid.setText(this.getTag().toString());
}
imgBack = (ImageView) title.findViewById(R.id.img_back);
imgRight = (ImageView) title.findViewById(R.id.img_right);
tvRight = (TextView) title.findViewById(R.id.tv_title_right);
imgBack.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
((Activity) context).finish();
}
});
if (isBack) {
imgBack.setVisibility(View.VISIBLE);
}
title.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
this.addView(title);
}

public void setTitle(String str) {
if (str != null) {
tvMid.setText(str);
}
}
public String getTitle() {
return tvMid.getText().toString();
}

public ImageView getTitleRigthImg(int res) {
tvRight.setVisibility(View.INVISIBLE);
imgRight.setVisibility(View.VISIBLE);
imgRight.setImageResource(res);
return imgRight;
}

public ImageView getTitleLeftImg(int res) {
imgBack.setVisibility(View.VISIBLE);
imgBack.setImageResource(res);
return imgBack;
}

public TextView getTitleRightText(String str) {
imgRight.setVisibility(View.INVISIBLE);
tvRight.setVisibility(View.VISIBLE);
tvRight.setText(str);
return tvRight;
}
}


4、在.xml中引入自定义的标题栏:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:title="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/colorbackhui"
android:orientation="vertical">

<com.youpinwallet.ypw.view.MTitle
android:id="@+id/title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/mdp_10"
android:tag="我的优惠券"
title:isBack="true" />

<com.jcodecraeer.xrecyclerview.XRecyclerView
android:id="@+id/x_recyclerview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/mdp_6"
android:layout_marginRight="@dimen/mdp_6"
android:paddingBottom="@dimen/mdp_10"
android:paddingTop="@dimen/mdp_5"
android:visibility="gone"
android:background="@color/colorbackhui" />

</LinearLayout>


5、在Java代码中引用标题栏 

title.setTitle(type.equals("WD") ? "我的优惠券" : "可使用优惠券");
title.getTitleRightText("使用规则").setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(CouponActivity.this, WebViewActivity.class);
intent.putExtra("title", "优惠券使用规则");
intent.putExtra("url", ApiUtils.URL_COUPON_DEAL);
startActivity(intent);
}
});
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息