最近Android刚入门的我,正在学习自定义控件,刚开始觉得为什么要写自定义的控件呢,想要实现的布局可以直接在xml文件中实现就好啊,后来我们组的大神跟我说这可是Android开发者的必备技能!在一个项目中,页面布局有一些都是差不多的,每个页面既然都差不多的布局,我们还要为每一个相似的布局编写相似的xml文件,这必然会造成项目大量冗余代码,所以不说废话了,还是看看让我最近纠结了一段时间的自定义控件实现吧!
首先我们要编写自定义控件的布局item.xml,我们要实现以下这种效果:
然后编写一个类CustomWidget.java,这个类的类名就是我们所自定义的控件的名字,有了这个类我们就可以像使用其他安卓控件一样使用我们自己定义的控件了。
package com.sun.customwidgetdemo;
import android.content.Context;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
public class CustomWidget extends RelativeLayout{
private ImageView mIcon;
private ImageView mArrow;
private TextView mText;
private View mLine;
public CustomWidget(Context context, AttributeSet attrs) {
super(context, attrs);
initView(context);
}
public void initView(Context context) {
LayoutInflater.from(context).inflate(R.layout.item, this);
mIcon = (ImageView)findViewById(R.id.iv_icon);
mArrow = (ImageView)findViewById(R.id.iv_arrow);
mText = (TextView)findViewById(R.id.tv_text);
mLine = (View)findViewById(R.id.v_line);
}
public void setItemText(CharSequence text) {
mText.setText(text);
}
public void setIconId(int resId) {
mIcon.setVisibility(VISIBLE);
mIcon.setImageResource(resId);
}
public void setArrowVisibility(int visibility) {
mArrow.setVisibility(visibility);
}
public void setLineVisibility(int visibility) {
mLine.setVisibility(visibility);
}
}
接下来就可以来应用我们已经定义的控件,在activity_main.xml文件和MainActivity.java中,我们编写如下代码:
package com.sun.customwidgetdemo;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.app.ActionBar;
import android.support.v4.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.os.Build;
public class MainActivity extends ActionBarActivity {
private CustomWidget mItem1, mItem2, mItem3;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
public void initView() {
mItem1 = (CustomWidget)findViewById(R.id.cw_item1);
mItem2 = (CustomWidget)findViewById(R.id.cw_item2);
mItem3 = (CustomWidget)findViewById(R.id.cw_item3);
mItem1.setItemText("我是自定义布局1");
mItem2.setItemText("我是自定义布局2");
mItem3.setItemText("我是自定义布局3");
}
}
本人安卓刚入门,纯属菜鸟,如有错误,请给予指出指导,谢谢了!