摸鱼学Android 十一 (控件1)
分辨率像素.9.png1 说明2 工具
UI控件之一1 TextView(文本框)1.1 基本属性1.2 特殊属性
2 EditText(输入框)2.1 基本属性2.2 设置清空文本图标
3 Button(按钮)3.1 基本属性3.2 按钮按下效果
4 ImageVIew(图像视图)4.1 基本属性4.2 Bitmap资源
5 RadioButton(单选按钮)5.1 基本属性5.2 单选功能
6 CheckBox(复选框)7 ToggleButton(切换按钮)7.1 基本属性7.2 图片切换
附录ShapeDrawable资源文件1 shape基本属性3.2 shape子标签
分辨率
VGA(Video Graphics Array):640*480WVGA(Wide VGA):800×480HVGA(Half-size VGA):480*320QVGA(Quarter VGA):320*240
像素
dp(dip): device independent pixels(设备独立像素),显示效果与设备硬件有关,一般为了支持WVGA、HVGA和QVGA 推荐使用这个,不依赖像素。px: pixels(像素),不同设备显示效果相同pt: point,是一个标准的长度单位,1pt=1/72英寸,用于印刷业,非常简单易用sp: scaled pixels(放大像素),主要用于字体显示。
.9.png
1 说明
.9图片在拉伸的时候特定区域不会发生图片失真,而不失真的区域可以自己绘制。
2 工具
Android SDK自带:draw9patch.batNinePatchEditor
UI控件之一
1 TextView(文本框)
1.1 基本属性
text:设置显示的文本内容,一般是把字符串写到string.xml文件中,然后通过@String/xxx取得对应的字符串内容textColor:设置字体颜色,同上,通过colors.xml资源来引用textColorHighlight:选中文本的底色,默认蓝色textStyle:设置字体风格,三个可选值:normal(无效果),bold(加粗),italic(斜体)textSize:字体大小,单位一般是用sptextScaleX:字的水平间距textScaleY:字的垂直间距typeface:字型,normal, sans, serif, monospaceheight:设置高度(一般使用dp)width:设置宽度(一般使用dp)gravity:对齐方式,文本内容相对于文本框的位置background:控件的背景颜色,可以是颜色,可以是图片,也可以是自定义的ShapeDrawable资源文件
1.2 特殊属性
阴影:
shadowColor:设置阴影颜色,需要与shadowRadius一起使用shadowRadius:设置阴影的模糊程度,设为0.1就变成字体颜色了,建议使用3.0shadowDx:设置阴影在水平方向的偏移shadowDy:设置阴影在竖直方向的偏移
附带图片(图片大小需要通过Java代码修改):
drawableTop:上方的图片drawableButtom:下方的图片drawableLeft:左边的图片drawableRight:右边的图片drawablePadding:与图片的间距
public class MainActivity extends Activity {
private TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//假如有一个上方的图片
textView = (TextView) findViewById(R.id.textView);
//获得四个不同方向上的图片资源,数组元素依次是:左上右下的图片
Drawable[] drawable = textView.getCompoundDrawables();
//下标1是上方
//长:文字最左开始0dp向右延伸150dp,宽:距离文字上方100dp开始向上延伸200dp
drawable[1].setBounds(0, 100, 150, 200);
textView.setCompoundDrawables(null, drawable[1], null, null);
}
}
链接:
autoLink:点击文字,即可跳转至某默认APP,none/web/email/phone/map/all
2 EditText(输入框)
2.1 基本属性
EditView是TextView的子类,属性继承。
hint:默认提示信息textColorHint:提示文本的颜色,默认灰色inputType:设置文本的类型,用于选择键盘,如date/number/phone等numeric:输入整数decimal:输入小数digits:输入数字capitalize:转换大写字母singleLine:单行输入password:输入密码autoText:自动拼写帮助capitalize:sentences-仅首字母大写,words-单次首字母大写,characters-每个字母大写phoneNumber:输入手机号码editable:是否可编辑selectAllOnFocus:获取焦点时全选文字 PS:EditView没有textAlign属性
2.2 设置清空文本图标
为EditText设置addTextChangedListener重写TextWatcher()里的抽象方法,监听输入框变化setCompoundDrawablesWithIntrinsicBounds设置打叉图片重写onTouchEvent方法,如果点击区域是打叉图片的位置,清空文本
public class EditTextWithDel extends EditText {
private final static String TAG = "EditTextWithDel";
private Drawable imgInable;
private Drawable imgAble;
private Context mContext;
public EditTextWithDel(Context context) {
super(context);
mContext = context;
init();
}
public EditTextWithDel(Context context, AttributeSet attrs) {
super(context, attrs);
mContext = context;
init();
}
public EditTextWithDel(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
mContext = context;
init();
}
private void init() {
imgInable = mContext.getResources().getDrawable(R.drawable.delete_gray);
//监听
addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void afterTextChanged(Editable s) {
setDrawable();
}
});
setDrawable();
}
// 设置删除图片
private void setDrawable() {
//有文本再显示
if (length() < 1)
setCompoundDrawablesWithIntrinsicBounds(null, null, null, null);
else
setCompoundDrawablesWithIntrinsicBounds(null, null, imgInable, null);
}
// 处理删除事件
@Override
public boolean onTouchEvent(MotionEvent event) {
if (imgAble != null && event.getAction() == MotionEvent.ACTION_UP) {
int eventX = (int) event.getRawX();
int eventY = (int) event.getRawY();
Log.e(TAG, "eventX = " + eventX + "; eventY = " + eventY);
Rect rect = new Rect();
getGlobalVisibleRect(rect);
rect.left = rect.right - 100;
if (rect.contains(eventX, eventY))
setText("");
}
return super.onTouchEvent(event);
}
@Override
protected void finalize() throws Throwable {
super.finalize();
}
}
3 Button(按钮)
3.1 基本属性
Button是TextView的子类,属性继承。
drawable:引用的drawable位图state_focused:是否获得焦点state_window_focused:是否获得窗口焦点state_enable:是否可用state_checkable:是否可被勾选state_checked:是否被勾选state_selected:是否被选择state_pressed:是否被按下state_active:是否处于活动状态state_single:是否只显示一个子控件state_first:第一个控件是否处于显示状态state_middle:中间一个子控件是否处于显示状态state_last:最后一个子控件是否处于显示状态
3.2 按钮按下效果
定义选择器 button_selector.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/btn_normal" android:state_pressed="false"></item>
<item android:drawable="@drawable/btn_pressed" android:state_pressed="true"></item>
</selector>
设置按钮背景
<Button
android:id="@+id/btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/button_selector"
android:text="按钮"/>
4 ImageVIew(图像视图)
4.1 基本属性
src:设置内容,填入图片时不拉伸,直接填充background:设置背景,填入图片时自动拉伸adjustViewBounds:设置图像缩放时是否按长宽比scaleType:设置缩放类型,[ fitXY | fitStart | fitCenter | fitEnd | center | centerCrop | centerInside | matrix ]
4.2 Bitmap资源
src:内容antialias:锯齿开关dither:图像抖动开关filter:滤镜开关gravity:对齐,与titleMode互斥titleMode:贴图模式,默认disabled-自动缩放,clamp-截去多余、边缘填白,repeat-截去多余、边缘复制填充,mirror-截去多余、边缘镜像填充;与gravity互斥tint:设置着色mipMap:是否标记为mipMap,默认false,使用mipMap可以提高显示性能
<?xml version="1.0" encoding="utf-8"?>
<bitmap
xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/drawable_resource"
android:antialias=["true" | "false"]
android:dither=["true" | "false"]
android:filter=["true" | "false"]
android:gravity=["top" | "bottom" | "left" | "right" | "center_vertical" |
"fill_vertical" | "center_horizontal" | "fill_horizontal" |
"center" | "fill" | "clip_vertical" | "clip_horizontal"]
android:mipMap=["true" | "false"]
android:titleMode=["disabled" | "clamp" | "repeat" | "mirror"] />
5 RadioButton(单选按钮)
5.1 基本属性
text:文本(其他text相关的属性都有,例如textSize)checked:选中状态,默认truebutton:设置为null则不显示原形按钮
5.2 单选功能
把RadioButton放到RadioGroup按钮组中 RadioGroup属性:
orientation:排列方式,[ horizontal | vertical ]checkedButton:默认选中
6 CheckBox(复选框)
属性与RadioButton基本一致
7 ToggleButton(切换按钮)
7.1 基本属性
属性继承Button。
disabledAlpha:禁用时的透明度,默认0.5textOff:未选中时的文本,默认OfftextOn:选中时的文本,默认Onchecked:选中状态,默认false
7.2 图片切换
定义选择器,switch_selector.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="false" android:drawable="@drawable/off"/>
<item android:state_checked="true" android:drawable="@drawable/on"/>
</selector>
设置按钮
<ToggleButton
android:id="@+id/tb1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/switch_selector"
android:textOn="@null"
android:textOff="@null"/>
附录
ShapeDrawable资源文件
可以作为控件的背景使用
1 shape基本属性
shape(形状):rectangle | oval | line | ring(矩形、椭圆、直线、环)
以下几个属性,只对 ring 有效:
innerRadius(内环半径):用尺寸值表示innerRadiusRatio(环宽度与内环半径的比值):内环半径=环宽度÷N,该属性会被innerRadius覆盖thickness(环厚度):用尺寸值表示thicknessRatio(环宽度与环厚度的比值,默认为3):环厚度=环宽度÷N,该属性会被thickness覆盖useLevel:决定是否作为LevelListDrawable来使用(levellistdrawable可以通过改变level值来切换相应的图片),一般为false
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="ring"
android:useLevel="false"
android:innerRadiusRatio="4"
android:thicknessRatio="4">
<solid android:color="#00ffff"/>
</shape>
3.2 shape子标签
solid:填充颜色
<solid android:color="color" />
corners:设置圆角,radius属性定义所有角的半径,其他四个分别对应4个角,可以覆盖radius
<corners
android:radius="9px"
android:bottomLeftRadius="10px"
android:bottomRightRadius="10px"
android:topLeftRadius="10px"
android:topRightRadius="10px" />
gradient:设置渐变,类型有线性、辐射、扫描三种
<gradient
android:type=["linear" | "radial" | "sweep"]
<!-- 定义渐变的角度,值为45的倍数,默认0(从左到右),90为从下到上 -->
android:angle="integer"
<!-- 定义渐变中心位置,取0~1 -->
android:centerX="float"
android:centerY="float"
<!-- 开始、中间、结束颜色,颜色会逐渐变化 -->
android:startColor="color"
android:centerColor="color"
android:endColor="color"
<!-- 定义辐射半径,仅radial有效 -->
android:gradientRadius="integer"
<!-- 是否作为LevelListDrawable -->
android:useLevel=["true" | "false"] />
padding:边距
<padding
android:left="integer"
android:top="integer"
android:right="integer"
android:bottom="integer" />
size:尺寸
<size
android:width="integer"
android:height="integer" />
stoke:设置边框的长度、颜色、每划长度、两划之间的间隔
<stroke
android:width="integer"
android:color="color"
android:dashWidth="integer"
android:dashGap="integer" />