您的位置:首页 > 产品设计 > UI/UE

Android中实现UI模板-topbar

2015-10-12 12:01 288 查看
在Android的app开发中,我们经常可以看到多类app的顶部导航栏基本是大同小异的。那么我们有木有一种方式可以写一个模板,然后自己定义并重复使用呢?显然,这个问题是可以解决的。

下面,我大概分享下实现思路:

1.首先,我们需要定义一个自己的布局,此时我们继承自RelativeLayout。

2.然后我们自定义属性来控制布局中的按钮和标题:导航栏一般都是分三个部分,即:左边按钮,中间标题,右边按钮。

3.在自定义的布局中,通过TypedArray来获取自定义属性,并设置按钮和标题的位置,颜色,字体大小等。

4.因为按钮有单击事件,所以在布局中,我们自定义一个事件接口,接口中有两个方法,分别对应左边按钮单击事件和右边按钮单击事件。

5.开发者自己实现该接口来实现按钮单击事件的处理。这样,我们就轻松的实现了一个自定义UI模板-顶部导航栏。

下面看代码:

package com.example.uitemplate;

import android.content.Context;

import android.content.res.TypedArray;

import android.graphics.drawable.Drawable;

import android.util.AttributeSet;

import android.view.Gravity;

import android.view.View;

import android.view.ViewGroup;

import android.widget.Button;

import android.widget.RelativeLayout;

import android.widget.TextView;

/**

* UI template -- TopBar

* @author 宋小亮

*

*/

public class TopBar extends RelativeLayout{

private Button btnLeft,btnRight;

private TextView tvTitle;

/**标题**/

private String title;

private float titleTextSize;

private int titleTextColor;

/**左边按钮**/

private String leftText;

private Drawable leftBackground;

private int leftTextColor;

/**右边按钮**/

private String rightText;

private Drawable rightBackground;

private int rightTextColor;

private LayoutParams lpLeftBtn,lpRightBtn,lpTVTitle;

private TypedArray ta;

private ClickListener clickListener;

public TopBar(Context context) {

super(context);

}

public TopBar(Context context, AttributeSet attrs) {

super(context, attrs);

ta = context.obtainStyledAttributes(attrs, R.styleable.TopBar);

//左边按钮

initBtnLeft(context);

//右边按钮

initBtnRight(context);

//中间标题

initTvTitle(context);

/**避免缓存产生的错误和浪费资源**/

ta.recycle();

//设置布局背景色

setBackgroundColor(0xFFF59563);

//设置单击事件

setOnClickListener();

}

/**

* 中间标题

* @param context

*/

private void initTvTitle(Context context) {

title = ta.getString(R.styleable.TopBar_title);

titleTextColor = ta.getColor(R.styleable.TopBar_titleTextColor, 0);

titleTextSize = ta.getDimension(R.styleable.TopBar_titleTextSize, 0);

tvTitle = new TextView(context);

tvTitle.setText(title);

tvTitle.setTextColor(titleTextColor);

tvTitle.setTextSize(titleTextSize);

/**标题文字居中**/

tvTitle.setGravity(Gravity.CENTER);

lpTVTitle = new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT);

lpTVTitle.addRule(RelativeLayout.CENTER_IN_PARENT,TRUE);

addView(tvTitle,lpTVTitle);

}

/**

* 右边按钮

* @param context

*/

private void initBtnRight(Context context) {

rightText = ta.getString(R.styleable.TopBar_rightText);

rightTextColor = ta.getColor(R.styleable.TopBar_rightTextColor, 0);

rightBackground = ta.getDrawable(R.styleable.TopBar_rightBackground);

btnRight = new Button(context);

btnRight.setText(rightText);

btnRight.setBackground(rightBackground);

btnRight.setTextColor(rightTextColor);

lpRightBtn = new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT);

lpRightBtn.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);

addView(btnRight,lpRightBtn);

}

/**

* 左边按钮

* @param context

*/

private void initBtnLeft(Context context) {

leftText = ta.getString(R.styleable.TopBar_leftText);

leftTextColor = ta.getColor(R.styleable.TopBar_leftTextColor, 0);

leftBackground = ta.getDrawable(R.styleable.TopBar_leftBackground);

btnLeft = new Button(context);

btnLeft.setText(leftText);

btnLeft.setBackground(leftBackground);

btnLeft.setTextColor(leftTextColor);

lpLeftBtn = new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT);

lpLeftBtn.addRule(RelativeLayout.ALIGN_PARENT_LEFT);

addView(btnLeft,lpLeftBtn);

}

/**

* 设置按钮单击事件

*/

private void setOnClickListener() {

btnLeft.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

clickListener.leftBtnClick();

}

});

btnRight.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

clickListener.rightBtnClick();

}

});

}

/**

* 单击事件回调接口

*/

public interface ClickListener{

public void leftBtnClick();

public void rightBtnClick();

}

/**

* 设置事件对象

*/

public void setCLickListener(ClickListener clickListener){

this.clickListener = clickListener;

}

}

Activity中实现:

package com.example.uitemplate;

import com.example.uitemplate.TopBar.ClickListener;

import android.app.Activity;

import android.os.Bundle;

import android.widget.Toast;

/**

* MainActivity

* @author 宋小亮

*

*/

public class MainActivity extends Activity {

private TopBar topBar;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

/**初始化Views**/

initViews();

/**设置按钮单击事件**/

topBar.setCLickListener(new ClickListener() {

@Override

public void rightBtnClick() {

// TODO Auto-generated method stub

Toast.makeText(MainActivity.this, "右边的按", Toast.LENGTH_SHORT).show();

}

@Override

public void leftBtnClick() {

// TODO Auto-generated method stub

Toast.makeText(MainActivity.this, "左边的按钮", Toast.LENGTH_SHORT).show();

}

});

}

/**

* 初始化Views

*/

private void initViews() {

topBar = (TopBar)findViewById(R.id.topBar);

}

}

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