您的位置:首页 > 其它

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

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);
}
});
}
}


这样的组件很简单,不过用的比较多,还是那句话,重要的是理解原理,懂了原理我们才能自定义出更加绚丽的控件.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: