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

Android万能标题栏

2016-03-04 13:53 405 查看
声明TopBar类,继承RelativeLayout

import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Color;
import android.util.AttributeSet;
import android.view.View;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;

public class TopBar extends RelativeLayout {

private String titleText;

private int titleTextColor;

private float titleTextSize;

private int leftBackgroundImg;

private int rightBackgroundImg;

private int rightMessageImg;

private final String default_titleText;
private final int default_titleTextColor;
private final float default_titleTextSize;
private final int default_leftBackgroundImg;
private final int default_rightBackgroundImg;
private final int default_rightMessageImg;

private ImageView mLeftImageView;
private ImageView mRightImageView;
private ImageView mRightMessageImageView;
private TextView mTitleTextView;

private LayoutParams mLeftParams;
private LayoutParams mRightParams;
private LayoutParams mTextParams;
private LayoutParams mRightMessageParams;

private topbarClickListener mlistener;

@SuppressWarnings("deprecation")
public TopBar(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
// TODO Auto-generated constructor stub
default_titleText = "标题栏";
default_titleTextColor = Color.BLACK;
default_titleTextSize = 14;
//				TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 7,
//				getResources().getDisplayMetrics());
default_leftBackgroundImg = R.drawable.type;
default_rightBackgroundImg = R.drawable.home_page_2;
default_rightMessageImg = R.drawable.home_page_3;

// 得到XML自定义属性
TypedArray attributes = context.getTheme().obtainStyledAttributes(attrs, R.styleable.TopBar, defStyleAttr, 0);
initByAttributes(context, attributes);
attributes.recycle();

initViews(context);
}

private void initViews(final Context context) {
// TODO Auto-generated method stub
mLeftImageView = new ImageView(context);
mRightImageView = new ImageView(context);
mRightMessageImageView = new ImageView(context);
mTitleTextView = new TextView(context);

mLeftImageView.setBackgroundResource(default_leftBackgroundImg);
mRightImageView.setBackgroundResource(default_rightBackgroundImg);
mRightMessageImageView.setBackgroundResource(default_rightMessageImg);

mTitleTextView.setText(titleText);
mTitleTextView.setTextSize(titleTextSize);
mTitleTextView.setTextColor(titleTextColor);
// mTitleTextView.setGravity(Gravity.CENTER);

mLeftParams = new LayoutParams(getResources().getDimensionPixelSize(R.dimen.x33),
getResources().getDimensionPixelSize(R.dimen.y28));
mLeftParams.setMargins(getResources().getDimensionPixelSize(R.dimen.x32), 0, 0, 0);
mLeftParams.addRule(RelativeLayout.ALIGN_PARENT_LEFT | RelativeLayout.CENTER_VERTICAL, TRUE);
addView(mLeftImageView, mLeftParams);

mRightParams = new LayoutParams(getResources().getDimensionPixelSize(R.dimen.x39),
getResources().getDimensionPixelSize(R.dimen.y35));
mRightParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT, TRUE);
mRightParams.addRule(RelativeLayout.CENTER_VERTICAL, TRUE);
mRightParams.setMargins(0, 0, getResources().getDimensionPixelSize(R.dimen.x32), 0);
addView(mRightImageView, mRightParams);

mRightMessageParams = new LayoutParams(getResources().getDimensionPixelSize(R.dimen.x11),
getResources().getDimensionPixelSize(R.dimen.y11));
mRightMessageParams.addRule(RIGHT_OF, mRightImageView.getId());
mRightMessageParams.addRule(BELOW, mRightImageView.getId());
mRightMessageParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT, TRUE);
// mRightMessageParams.add
mRightMessageParams.setMargins(0, getResources().getDimensionPixelSize(R.dimen.x11),
getResources().getDimensionPixelSize(R.dimen.x32), 0);
// mRightMessageImageView.setScaleType(ScaleType.CENTER_CROP);
// mRightMessageImageView.set
addView(mRightMessageImageView, mRightMessageParams);

mTextParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
mTextParams.addRule(RelativeLayout.CENTER_IN_PARENT, TRUE);
addView(mTitleTextView, mTextParams);

mLeftImageView.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
// Toast.makeText(context, "left", Toast.LENGTH_SHORT).show();
mlistener.leftClick();
}
});

mRightImageView.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
// Toast.makeText(context, "right", Toast.LENGTH_SHORT).show();
mlistener.rightClick();
}
});
}

@SuppressWarnings("unused")
private void initByAttributes(Context context, TypedArray attributes) {
// TODO Auto-generated method stub
titleText = attributes.getString(R.styleable.TopBar_title);

titleTextColor = attributes.getColor(R.styleable.TopBar_titleTextColor, default_titleTextColor);

titleTextSize = attributes.getDimension(R.styleable.TopBar_titleTextSize, default_titleTextSize);

leftBackgroundImg = attributes.getResourceId(R.styleable.TopBar_leftBackground, default_leftBackgroundImg);

rightBackgroundImg = attributes.getResourceId(R.styleable.TopBar_rightBackground, default_rightBackgroundImg);

rightMessageImg = attributes.getResourceId(R.styleable.TopBar_rightMessage, default_rightMessageImg);
}

public TopBar(Context context, AttributeSet attrs) {
// TODO Auto-generated constructor stub
this(context, attrs, 0);
}

public TopBar(Context context) {
// TODO Auto-generated constructor stub
this(context, null);
}

public interface topbarClickListener {
void leftClick();

void rightClick();
}

public void setOnTopbarClickListener(topbarClickListener listener) {
this.mlistener = listener;
}

public void setVisable(int id, boolean flag) {
if (flag) {
if (id == 0) {
mLeftImageView.setVisibility(View.VISIBLE);
} else {
mRightImageView.setVisibility(View.VISIBLE);
}
} else {
if (id == 0) {
mLeftImageView.setVisibility(View.GONE);
} else {
mRightImageView.setVisibility(View.GONE);
}
}
}
}


在attrs文件中:

<declare-styleable name="TopBar">
<attr name="title" format="string" />
<attr name="titleTextSize" format="dimension" />
<attr name="titleTextColor" format="color" />
<attr name="leftBackground" format="reference" />
<attr name="rightBackground" format="reference" />
<attr name="rightMessage" format="reference" />
</declare-styleable>
布局文件title_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<com.wxy.titlebar.TopBar xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:custom="http://schemas.android.com/apk/res-auto"
xmlns:app="http://schemas.android.com/apk/res/com.wxy.titlebar"
android:layout_width="match_parent"
android:layout_height="@dimen/y60"
android:background="@color/title"
app:leftBackground="@drawable/type"
app:rightBackground="@drawable/home_page_2"
app:rightMessage="@drawable/home_page_3"
app:titleTextColor="@color/white"
app:title="标题栏"
android:id="@+id/topbar">

</com.wxy.titlebar.TopBar>
在MainActivity中调用:

import com.wxy.titlebar.TopBar.topbarClickListener;

import android.app.Activity;
import android.os.Bundle;
import android.widget.Toast;

public class MainActivity extends Activity implements topbarClickListener{

private TopBar mTopBar;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mTopBar=(TopBar) findViewById(R.id.topbar);
mTopBar.setOnTopbarClickListener(this);
}

@Override
public void leftClick() {
// TODO Auto-generated method stub
Toast.makeText(this, "leftClick", Toast.LENGTH_SHORT).show();
}

@Override
public void rightClick() {
// TODO Auto-generated method stub
Toast.makeText(this, "rightClick", Toast.LENGTH_SHORT).show();
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: