您的位置:首页 > 其它

一个普通的自定义控件

2017-03-21 17:29 113 查看
一个普通的TitleView



可以自定义扩展,是一个相对布局,放置了一个ImageView 和一个TextView;

可以隐藏图片,可以设置图片大小,设置TextView 内容,设置字体大小;

简单使用

<TitleView xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="2000dp"
android:background="@color/colorRed"
app:hideIcon="true"
app:titleColor="#fff"
app:titleSize="18sp"
app:titleText="首页" />

高度已经顶死为 38dp 所以可以随便设置高度;

此文件是在src/values/attrs.xml 中自定义的属性

<declare-styleable name="TitleView">
<!--设置返回键中 靠左边距-->
<attr name="backPaddingLeft" format="dimension"/>
<!--设置Title显示的文字-->
<attr name="titleText" format="string|reference"/>
<!--设置Title显示的字体颜色-->
<attr name="titleColor" format="reference|color"/>
<!--设置Title的字体大小-->
<attr name="titleSize" format="dimension|reference"/>
<!--设置返回键中的图片-->
<attr name="iconSrc" format="reference"/>
<!--是否隐藏 返回按钮-->
<attr name="hideIcon" format="boolean"/>
</declare-styleable>

看一下自定义控件
public class TitleView extends RelativeLayout {
private static final int WIDGET_HEIGHT = 38;
private TextView tvTitle;
private ImageView ivBack;
private String titleText;
private int titleColor = Color.WHITE;
private int titleSize;
private int imgIconBackId;
private int imgPaddingLeft;
private boolean isHideIcon;
private int totalHeight;

public TitleView(Context context) {
super(context);
init(context, null, 0);
}

public TitleView(Context context, AttributeSet attrs) {
super(context, attrs);
init(context, attrs, 0);
}

public TitleView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(context, attrs, defStyleAttr);
}

private void init(Context context, AttributeSet attrs, int defStyleAttr) {
//将高度锁定,将dp 转成px;
totalHeight = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, WIDGET_HEIGHT, getResources().getDisplayMetrics());

int iconPadding = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 10, getResources().getDisplayMetrics());
imgPaddingLeft = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 8, getResources().getDisplayMetrics());
titleSize = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 14, getResources().getDisplayMetrics());
//初始化图片 话显示的图片
imgIconBackId = R.mipmap.ic_launcher;

TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.TitleView, defStyleAttr, 0);
int count = ta.getIndexCount();
for (int i = 0; i < count; i++) {
int attr = ta.getIndex(i);
switch (attr) {
case R.styleable.TitleView_backPaddingLeft:
imgPaddingLeft = (int) ta.getDimension(attr, 0);
break;
case R.styleable.TitleView_titleColor:
titleColor = ta.getColor(attr, Color.WHITE);
break;
case R.styleable.TitleView_titleSize:
titleSize = (int) ta.getDimension(attr, titleSize);
break;
case R.styleable.TitleView_titleText:
titleText = ta.getString(attr);
break;
case R.styleable.TitleView_iconSrc:
imgIconBackId = ta.getResourceId(attr, imgIconBackId);
break;
case R.styleable.TitleView_hideIcon:
isHideIcon = ta.getBoolean(attr, false);
break;
}
}

/**
* 设置图片
*/
ivBack = new ImageView(getContext());
ivBack.setImageResource(imgIconBackId);
RelativeLayout.LayoutParams ivLp = new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
ivLp.addRule(RelativeLayout.CENTER_VERTICAL);
ivBack.setPadding(imgPaddingLeft, iconPadding, iconPadding, iconPadding);
ivBack.setLayoutParams(ivLp);
if (isHideIcon) {
ivBack.setVisibility(GONE);
}
addView(ivBack);

/**
* 添加title 布局;
*/
tvTitle = new TextView(context);
RelativeLayout.LayoutParams tvLp = new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
/**
* 在相对布局中,设置当前TextView 在相对布局中的 位置;
*/
tvLp.addRule(CENTER_IN_PARENT);
tvTitle.setLayoutParams(tvLp);

tvTitle.setText(titleText);

tvTitle.setTextSize(TypedValue.COMPLEX_UNIT_PX, titleSize);

tvTitle.setTextColor(titleColor);
addView(tvTitle);
}

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
//这里将当前控件的高度固定死,
super.onMeasure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(totalHeight, MeasureSpec.EXACTLY));

}

public void setTitleText(String text) {
tvTitle.setText(text);
}

public void setTitleSize(float size) {
tvTitle.setTextSize(size);
}

public void setIcon(Bitmap bitmap) {
ivBack.setImageBitmap(bitmap);
}

public void setIcon(int srcId) {
ivBack.setImageResource(srcId);
}

public void setOnIconClickListener(View.OnClickListener l) {
ivBack.setClickable(true);
ivBack.setOnClickListener(l);
}

public void setIconLeftPadding(int imgPaddingLeft) {
ivBack.setPadding(imgPaddingLeft, 0, 0, 0);
}

public void setIconVisibility(int visibility) {
ivBack.setVisibility(visibility);
}
}
这就是一个简单的自定义控件;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  自定义控件 控件