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

自定义标题栏

2015-11-27 09:52 543 查看
现在很多人用toolbar 来代替 标题栏, 不过还是有些公司设计的还是左中右那种标题,

初入android 

还是很多人对toolbar的使用不是很好。

自己封装了一个 标题栏

可以 带 返回 标题 右侧按钮的

 方便灵活

自学的android 不是很好。

代码附上

AppTitle

package com.dmcc.yingyu.application;

import android.content.Context;
import android.media.Image;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

import com.dmcc.yingyu.R;

/**
*
*
*
* 使用方法 init(标题类型APPtitleStyle) setTitle(各种类型)
*
* 默认都有logo 如果设置返回按钮 就隐藏左侧logo
* @Description
* @author wushange
* @ClassName AppTitle
* @date 2015-11-23 上午10:19:00
*/
public class AppTitle extends LinearLayout {

private LayoutInflater mInflater;
private View mHeader;

private ImageView mHeadLogo;
// 标题
private TextView mHeadTitle;
// 右边文本
private TextView mHeadRightText;
// 左侧返回按钮
private Button mback;
// 右侧按钮
private Button mRightBtn;

public AppTitle(Context context) {
super(context);
init(context);
}

public AppTitle(Context context, AttributeSet attrs) {
super(context, attrs);
init(context);
}

public void init(Context context) {
mInflater = LayoutInflater.from(context);
mHeader = mInflater.inflate(R.layout.include_head, null);
addView(mHeader);
initViews();

}

public void setbackClisener(OnClickListener clickListener) {
mback.setOnClickListener(clickListener);
}
public void setRightClisener(OnClickListener clickListener){
mHeadRightText.setOnClickListener(clickListener);
}

public void initViews() {
mback = (Button) findViewById(R.id.back_btn);
mHeadLogo = (ImageView) findViewByHeaderId(R.id.include_head_logo);
mRightBtn = (Button) findViewById(R.id.include_right_brn);
mHeadTitle = (TextView) findViewByHeaderId(R.id.include_head_title);
mHeadRightText = (TextView) findViewByHeaderId(R.id.include_head_right_btn);
}

public View findViewByHeaderId(int id) {
return mHeader.findViewById(id);
}

public void init(AppTitleStyle style) {
switch (style) {
case DEFAULT_TITLE:
defaultTitle();
break;
case BACK_TITLR:
backTitle();
break;
case TITLE_RIGHT_TEXT:
titleRightText();
break;
case BACK_TITLE_RIGHT:
backTitleRight();
break;

}
}

/**
* 默认只有标题
*/
private void defaultTitle() {
mHeadLogo.setVisibility(View.VISIBLE);
mback.setVisibility(View.INVISIBLE);
mHeadTitle.setVisibility(View.VISIBLE);
mHeadRightText.setVisibility(View.INVISIBLE);
}

/**
* 添加默认标题内容
*
* @param title
* @param subTitle
*/
public void setTitle(CharSequence title) {
if (title != null) {
mHeadTitle.setText(title);
} else {
mHeadTitle.setVisibility(View.INVISIBLE);
}
}

/**
* 返回+标题
*/
private void backTitle() {
mHeadLogo.setVisibility(View.GONE);
mback.setVisibility(View.VISIBLE);
mHeadTitle.setVisibility(View.VISIBLE);
mHeadRightText.setVisibility(View.INVISIBLE);
}

/**
* 返回+标题
*
* @param title
* @param subTitle
*/
public void setBackTitle(CharSequence title) {
if (title != null) {
mHeadTitle.setText(title);
} else {
mHeadTitle.setVisibility(View.INVISIBLE);
}
}

/**
* 标题以及右边有文本内容
*/
private void titleRightText() {
mHeadLogo.setVisibility(View.INVISIBLE);
mback.setVisibility(View.INVISIBLE);
mHeadTitle.setVisibility(View.VISIBLE);
mHeadRightText.setVisibility(View.VISIBLE);
}

/**
* 添加标题以及右边文本内容
*
* @param title
* @param subTitle
* @param rightText
*/
public void setTitleRightText(CharSequence title, CharSequence rightText) {
setTitle(title);
if (mHeadRightText != null && rightText != null) {
mHeadRightText.setText(rightText);
}
}

/**
* 返回按钮,标题,右侧按钮
*/
private void backTitleRight() {
mHeadLogo.setVisibility(View.GONE);
mback.setVisibility(View.VISIBLE);
mHeadTitle.setVisibility(View.VISIBLE);
mHeadRightText.setVisibility(View.VISIBLE);

}

/**
* 添加标题以及右边文本内容
*
* @param title
* @param subTitle
* @param rightText
*/
public void setBackTitleRightText(CharSequence title, CharSequence rightText) {
setTitle(title);
if (mHeadRightText != null && rightText != null) {
mHeadRightText.setText(rightText);
}
}

/**
* @author wushange
*
* @param BACK_TITLR
* :带返回按钮和标题的标题栏
* @param DEFAULT_TITLE
* :只有标题的标题栏
* @param TITLE_RIGHT_TEXT
* :带标题和右侧按钮的标题栏
* @param BACK_TITLE_RIGHT
* :返回按钮标题栏和右侧按钮都有的标题栏
*/
public enum AppTitleStyle {
BACK_TITLR, DEFAULT_TITLE, TITLE_RIGHT_TEXT, BACK_TITLE_RIGHT;
}

}
布局文件:include_head
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
style="@style/title_style" >

<include layout="@layout/include_back_button_layout" />

<TextView
android:id="@+id/include_head_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="标题"
android:textColor="@color/white"
android:textSize="20sp" />

<ImageView
android:id="@+id/include_head_logo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:padding="8dp"
android:src="@drawable/main_logo" />

<TextView
android:id="@+id/include_head_right_btn"
android:layout_width="wrap_content"
android:layout_height="55dp"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:gravity="center"
android:padding="10dp"
android:text="右侧按钮"
android:textColor="@color/darkgrey"
android:textSize="16sp"
android:visibility="visible" />

<Button
android:id="@+id/include_right_brn"
android:layout_width="wrap_content"
android:layout_height="55dp"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:gravity="center"
android:padding="10dp"
android:text="右侧按钮"
android:visibility="gone" />

</RelativeLayout>

需要个返回按钮,也是自己瞎封装了一个 ,用着方便
include_back_button_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical" >

<Button
android:id="@+id/back_btn"
style="@style/back_btn_style"
android:drawableStart="@drawable/back" />

</LinearLayout>

使用方法
appTitle.init(AppTitleStyle.BACK_TITLE_RIGHT);
appTitle.setTitleRightText("发表", "发表");
appTitle.setbackClisener(this);
appTitle.setRightClisener(this);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息