自定义组件(二)------使用系统控件组合的自定义控件之二
2015-11-26 17:55
405 查看
系统控件组合的自定义控件—-TopView
——ONE Goal ,ONE Passion!今天终于把公司老板给的一个项目给整理完了.功能也算基本实现,现在等着和pc端的哥们进行业务数据的传输了,整整搞了4天.真是挺累的.独立开发真是太累了.以前就吐槽过(这个项目是接手的别人的项目,那哥们代码写的真是醉了.所有的东西全在一个类里—–这哥们是为了把数据全存成全局变量,以及一些状态好更改比如topview中的一些标识,o(︶︿︶)o ). 不吐槽了.全是槽点.
下午把他的topview给重新写了一个,还是记录下来这个逗比的同行吧,哈哈
1,在layout文件夹下创建setting_view.xml布局
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" > <ImageView android:id="@+id/iv_left" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/connect"/> <ImageView android:id="@+id/iv_center" android:layout_centerHorizontal="true" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/pflogo"/> <ImageView android:layout_alignParentRight="true" android:id="@+id/iv_right" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/home"/> </RelativeLayout>
2.将布局加载到自定义的view中并注册一些事件
/** * 作者 : fy on 2015/11/24. * 注释 : */ public class topView extends FrameLayout implements View.OnClickListener { View infalte; ImageView iv_left, iv_center, iv_right; public topView(Context context) { this(context, null); } public topView(Context context, AttributeSet attrs) { this(context, attrs, 0); } public topView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); infalte = LayoutInflater.from(context).inflate(R.layout.topview_layout, null); iv_left = (ImageView) infalte.findViewById(R.id.iv_left); iv_center = (ImageView) infalte.findViewById(R.id.iv_center); iv_right = (ImageView) infalte.findViewById(R.id.iv_right); iv_left.setOnClickListener(this); iv_center.setOnClickListener(this); iv_right.setOnClickListener(this); this.addView(infalte); } @Override public void onClick(View v) { switch (v.getId()){ case R.id.iv_left: break; case R.id.iv_center: break; case R.id.iv_right: //点击了右侧的按钮后 执行方法.方法有activity中重写 if(mOnClickTopView == null){ break; } mOnClickTopView.clickHome(); break; } } /** * 更改左侧图标 */ public void setIv_left(){ iv_left.setImageResource(R.drawable.disconnect); } /** * 提供给外部的接口 以便操作 */ public void setOnClickTopViewListener(OnClickTopView listener){ this.mOnClickTopView = listener; } public OnClickTopView mOnClickTopView; public interface OnClickTopView{ void clickHome(); } }
3.在activity中使用控件
a. 在activity中使用的xml布局文件<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/bj" android:orientation="vertical"> <com.example.pf.view.topView android:id="@+id/main_tab_banner" android:layout_width="match_parent" android:layout_height="wrap_content"> </com.example.pf.view.topView> </RelativeLayout> </LinearLayout>
b.在activity中使用
public class MessageActivity extends BaseActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_message); clickHome(); } /** * * */ public void clickHome() { //找到自定义的控件 . topView top_View = (topView) findViewById(R.id.main_tab_banner); //为其设置监听回调 top_View.setOnClickTopViewListener(new topView.OnClickTopView() { @Override public void clickHome() { Intent intent = new Intent(act, ItemSelectActivity.class); startActivity(intent); } }); } }
这样的组件很简单,不过用的比较多,还是那句话,重要的是理解原理,懂了原理我们才能自定义出更加绚丽的控件.
相关文章推荐
- 数字排序
- 日历
- java socket报 connection reset的原因和解决方式
- (WJW)构建企业级Docker_Registry_V2
- 文章标题
- 【LEETCODE】92-Reverse Linked List II
- 欢迎使用CSDN-markdown编辑器
- js中函数的定义有无顺序的区别
- 图像旋转
- linux下bluetooth编程(八)SDP层编程
- 八皇后问题求解
- 高等特性
- 获取经过多少月分
- 第8章-对话框(二)总结一下
- SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)
- Android网络编程常用的三种方法
- [前端] node net模块测试
- 使用axis2调用sap生成的webservice(带用户密码认证)
- HTML Input控件
- 基于Hadoop的云存储系统