封装一个小小的控件,便于复用,分享一下,如果有更好的方法请告知
首先创建复合控件的布局文件
icontextview.xml
android:id="@+id/layout_icontextview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="horizontal" >
android:id="@+id/img_icon"
android:layout_width="39dp"
android:layout_height="39dp" />
android:id="@+id/textview_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textStyle="bold"
android:textSize="20sp"
android:text="电话订购" />
然后创建复合控件类,继承一个LinearLayout
/**
* File: 继承LinearLayout的自定义复合控件。
* 图片+文字,点击时有选中效果,默认水平
*
* @author: wcs Date: 2015年1月30日
*/
public class IconTextView extends LinearLayout implements OnTouchListener{
/** 图标*/
private ImageView mTextViewIcon = null;
/** 标题*/
private TextView mTitleTextView = null;
/** 父容器*/
private LinearLayout mIconTextViewLayout = null;
/** 布局监听*/
private IconTextViewListener mListener;
/** 默认icon*/
private int mDefaultIconId;
/** 选中icon*/
private int mPressedIconId;
/** 默认字体颜色*/
private int mDefaultColorId;
/** 选中字体颜色*/
private int mPressedColorId;
public IconTextView(Context context, AttributeSet attrs) {
super(context, attrs);
LayoutInflater.from(context).inflate(R.layout.icontextview, this, true);
init();
}
/********************************************
* 初始化
*/
private void init(){
mTextViewIcon = (ImageView) findViewById(R.id.img_icon);
mTitleTextView = (TextView) findViewById(R.id.textview_title);
mIconTextViewLayout = (LinearLayout) findViewById(R.id.layout_icontextview);
mIconTextViewLayout.setOnTouchListener(this);
}
/********************************************
* 设置布局方向
* @param orientation LinearLayout.VERTICAL or LinearLayout.HORIZONTAL 默认为HORIZONTAL
*/
public void setLayoutOrientation(int orientation){
mIconTextViewLayout.setOrientation(orientation);
}
/********************************************
* 设置icon默认图片
* @param defaultIconId 默认icon
* @param pressedIconId 按下icon
*/
public void setIcon(int defaultIconId, int pressedIconId){
this.mDefaultIconId = defaultIconId;
this.mPressedIconId = pressedIconId;
mTextViewIcon.setBackgroundResource(defaultIconId);
}
/********************************************
* 设置文字
* @param title 标题文字
* @param defaultColorId 默认文字颜色
* @param pressedColorId 按下文字颜色
*/
public void setTitle(String title, int defaultColorId, int pressedColorId){
this.mDefaultColorId = defaultColorId;
this.mPressedColorId = pressedColorId;
mTitleTextView.setText(title);
mTitleTextView.setTextColor(getResources().getColor(mDefaultColorId));
}
/********************************************
* 设置title文字大小
* @param size
*/
public void setTitleTextSize(float textSize){
mTitleTextView.setTextSize(textSize);
}
/********************************************
* 设置icon大小
* @param width
* @param height
*/
public void setIconSize(int width, int height){
android.view.ViewGroup.LayoutParams params = mTextViewIcon.getLayoutParams();
params.width = width;
params.height = height;
mTextViewIcon.setLayoutParams(params);
}
/********************************************
* 为此自定义控件设置监听
* @param listener IconTextViewListener
*/
public void setListener(IconTextViewListener listener){
this.mListener = listener;
}
/********************************************
* 当Event up时调用
*/
private void onClick(){
mListener.onIconTextViewClick();
}
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN){
mTitleTextView.setTextColor(getResources().getColor(mPressedColorId));
mTextViewIcon.setBackgroundResource(mPressedIconId);
return true;
}else if (event.getAction() == MotionEvent.ACTION_UP){
mTitleTextView.setTextColor(getResources().getColor(mDefaultColorId));
mTextViewIcon.setBackgroundResource(mDefaultIconId);
onClick();
return true;
}else {
return false;
}
}
}
public interface IconTextViewListener {
void onIconTextViewClick();
}
最后就是实现功能的Activity什么都木有
/**
* @author: wcs
*/
public class MainActivity extends Activity {
/** 图片+文字按钮*/
private IconTextView iconTextView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
iconTextView = (IconTextView) findViewById(R.id.icontextview_call);
//iconTextView.setLayoutOrientation(LinearLayout.VERTICAL);
iconTextView.setLayoutOrientation(LinearLayout.HORIZONTAL);
iconTextView.setIconSize(100, 100);
iconTextView.setTitleTextSize(20f);
// R.drawable.dot_white 默认icon
// R.drawable.dot_red 按下icon
iconTextView.setIcon(R.drawable.dot_white, R.drawable.dot_red);
// R.color.text_unselect_color 默认文字颜色
// R.color.text_select_color 按下文字颜色
iconTextView.setTitle("你懂的!!!", R.color.text_unselect_color, R.color.text_select_color);
iconTextView.setListener(new IconTextViewListener() {
@Override
public void onIconTextViewClick() {
Toast.makeText(getApplicationContext(), "点击控件", Toast.LENGTH_LONG).show();
}
});
}
}
然后上两张效果图
附上Demo地址
http://download.youkuaiyun.com/detail/w315436432/8424957