自定义组件(二)------使用系统控件组合的自定义控件之二

来源:互联网 发布:淘宝三颗心需要多少单 编辑:程序博客网 时间:2024/05/25 05:35

系统控件组合的自定义控件—-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);            }        });    }}
这样的组件很简单,不过用的比较多,还是那句话,重要的是理解原理,懂了原理我们才能自定义出更加绚丽的控件.
0 0
原创粉丝点击