Android万能标题栏
2016-03-04 13:53
405 查看
声明TopBar类,继承RelativeLayout
在attrs文件中:
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(); } }
相关文章推荐
- 修改Android默认背光值
- AndroidWidget 桌面小控件 ; 完成效果 : 桌面展示 : xx年 xx月 xx日 xx时 xx分 xx秒
- Android 6.0 (Marshmallow) 加载svg图片 报错
- android 代码设置、打开wifi热点及热点的连接
- Android 6.0 (Marshmallow) 加载svg图片 报错
- Gitlab上如何给指定人员在指定项目里设置指定权限,给项目设置保护
- Android Hybrid开发
- (2016.5.26更新8.0.1失效问题)Android Studio上使用Butterknife注解框架与插件Android Butterknife Zelezny
- ImageView.ScaleType /android:scaleType值的意义区别
- Android4.4关机菜单添加重启系列选项
- Android,与北岛的诗
- Android错误解决方法集锦
- Gitlabr如何设置邮件提醒?
- Android内存泄漏(3)
- [AndroidAnnotations框架]AndroidAnnotations的配置
- android-USB-OTG 外部设备通讯 USB插拔检测
- Android开发环境搭建
- Android 切换系统语言功能实现
- Android读写assets目录下面的资源文件(文件夹)
- android文件读取asse 4000 ts