自定义控件之TopBar
2016-01-12 23:05
295 查看
在values文件下新建attrs.xml来添加自定义的属性;
attrs.xml
在自定义View里面将这些属性提取出来
TopBar.java
在main_activity.xml里面引用topbar.xml
main_activity.xml
topbar.xml
具体用法
MainActivity.java
效果:
代码摘自–Android群英传
attrs.xml
<?xml version="1.0" encoding="UTF-8"?> <resources> <declare-styleable name="TopBar"> <attr name="title" format="string"></attr> <attr name="titleTextSize" format="dimension"></attr> <attr name="titleColor" format="color"></attr> <attr name="leftText" format="string"></attr> <attr name="leftBackground" format="color|reference"></attr> <attr name="leftTextColor" format="color"></attr> <attr name="rightText" format="string"></attr> <attr name="rihtBackground" format="color|reference"></attr> <attr name="rightTextColor" format="color"></attr> </declare-styleable> </resources>
在自定义View里面将这些属性提取出来
TopBar.java
package com.example.day0112.ui.view; import com.example.day0112.R; import android.annotation.SuppressLint; 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.widget.Button; import android.widget.RelativeLayout; import android.widget.TextView; public class TopBar extends RelativeLayout { private String mTitle; private int mTextColor; private float mTitleTextSize; private String mLeftText; private int mLeftTextColor; private Drawable mLeftBackground; private String mRightText; private int mRightTextColor; private Drawable mRightBackground; private Button mLeftButton; private TextView mTitleView; private Button mRightButton; private LayoutParams mLeftParams; private LayoutParams mTitleParams; private LayoutParams mRightParams; private topBarClickListener mListener; @SuppressLint("NewApi") public TopBar(Context context, AttributeSet attrs) { super(context, attrs); TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.TopBar); mTitle = ta.getString(R.styleable.TopBar_title); mTextColor = ta.getColor(R.styleable.TopBar_titleColor, 0); mTitleTextSize = ta.getDimension(R.styleable.TopBar_titleTextSize, 10);//返回的是浮点 mLeftTextColor = ta.getColor(R.styleable.TopBar_leftTextColor, 0); mLeftText = ta.getString(R.styleable.TopBar_leftText); mLeftBackground = ta.getDrawable(R.styleable.TopBar_leftBackground);//返回的是drawable mRightText = ta.getString(R.styleable.TopBar_rightText); mRightTextColor = ta.getColor(R.styleable.TopBar_rightTextColor, 0); mRightBackground = ta.getDrawable(R.styleable.TopBar_rihtBackground); //获取完TypeArray后一般要调用recycle方法来避免重新创建的时候的错误 ta.recycle(); mLeftButton = new Button(context); mTitleView = new TextView(context); mRightButton = new Button(context); //为创建的组件元素赋值 mLeftButton.setText(mLeftText); mLeftButton.setTextColor(mLeftTextColor); mLeftButton.setBackground(mLeftBackground); mLeftButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { mListener.onLeftClick(); } }); mTitleView.setText(mTitle); mTitleView.setTextColor(mTextColor); mTitleView.setTextSize(mTitleTextSize); mTitleView.setGravity(Gravity.CENTER); mRightButton.setText(mRightText); mRightButton.setTextColor(mRightTextColor); mRightButton.setBackground(mRightBackground); mRightButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { mListener.onRightClick(); } }); //为组件元素设置相应的布局元素 mLeftParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT); mLeftParams.addRule(RelativeLayout.ALIGN_PARENT_LEFT,TRUE); //添加到ViewGroup addView(mLeftButton,mLeftParams); mTitleParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT); mTitleParams.addRule(RelativeLayout.CENTER_IN_PARENT,TRUE); //添加到ViewGroup addView(mTitleView,mTitleParams); mRightParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT); mRightParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT,TRUE);//继承RelativeLayout才能这样写 //添加到ViewGroup addView(mRightButton,mRightParams); } public interface topBarClickListener { //左按钮点击事件 void onLeftClick(); //右按钮点击事件 void onRightClick(); } public void setOnTopBarClickListener(topBarClickListener mListener) { this.mListener = mListener; } /** * 设置按钮的显示与否,通过id区分按钮,flag区分是否显示 * @param id 0:左按钮 1:右按钮 * @param flag 是否显示 */ public void setButtonVisiable(int id,boolean flag) { if (flag) { if (id == 0) { mLeftButton.setVisibility(View.VISIBLE); } else { mRightButton.setVisibility(View.VISIBLE); } } else { if (id == 0) { mLeftButton.setVisibility(View.GONE); } else { mRightButton.setVisibility(View.GONE); } } } }
在main_activity.xml里面引用topbar.xml
main_activity.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" xmlns:app="http://schemas.android.com/apk/res/com.example.day0112"> <include layout="@layout/topbar" /> <!-- 引用 --> </LinearLayout>
topbar.xml
<com.example.day0112.ui.view.TopBar xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res/com.example.day0112" android:layout_width="match_parent" android:layout_height="40dp" android:background="#fff" android:id="@+id/topBar" app:title="自定义标题" app:titleTextSize="6sp" app:titleColor="#333" app:leftText="Back" app:leftTextColor="#333" app:leftBackground="#fff" app:rightText="Right" app:rightTextColor="#333" app:rihtBackground="#fff" ></com.example.day0112.ui.view.TopBar> <!-- android studio 引用第三方控件的名字空间 --> <!-- xmlns:custom="http://schemas.android.com/apk/res/res-auto" --> <!-- eclipse 引用第三方控件的名字空间 --> <!-- xmlns:app="http://schemas.android.com/apk/res/com.example.day0112" --> <!-- xmlns:app="http://schemas.android.com/apk/res/包名" -->
具体用法
MainActivity.java
package com.example.day0112; import com.example.day0112.ui.view.TopBar; import com.example.day0112.ui.view.TopBar.topBarClickListener; import android.os.Bundle; import android.app.Activity; import android.view.Menu; import android.widget.TextView; import android.widget.Toast; public class MainActivity extends Activity{ private TopBar topBar; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); topBar = (TopBar) findViewById(R.id.topBar); topBar.setOnTopBarClickListener(new topBarClickListener() { @Override public void onRightClick() { Toast.makeText(getApplicationContext(), "click right", Toast.LENGTH_LONG).show(); } @Override public void onLeftClick() { Toast.makeText(getApplicationContext(), "click left", Toast.LENGTH_LONG).show(); } }); } }
效果:
代码摘自–Android群英传
相关文章推荐
- 第二章 Shell编程之变量
- shell脚本手动执行成功,定时任务调用失败的解决方法。
- Centos6.3 安装tomcat及开机启动
- Linux xclip命令
- Robust Optimization VS Stochastic Optimization
- TrustZone——运行环境—QEMU—OP-TEE (新办法)
- Hadoop环境测试
- linux 使用别名
- Install Ambari 2.2.0 from Public Repositories(Hadoop)
- 使用月历控件CMonthCalCtrl让VC2010的CMFCPropertyGridProperty支持日期选择
- Linux命令行下的vim文本编辑器
- 解决SecureCRT连接linux超时后断开
- shell中的括号(小括号,中括号,大括号/花括号)
- Operation of sorted set
- shells
- Hdaoop环境配置及中文分词加排序
- Codeforences Goodbye 2015 B New Year and Old Property
- OpenGL介绍
- Linux之DebugFS(一)-----------------------追踪内核函数调用
- Linux下Tomcat的安装