摸鱼学Android 十一(控件1)

tech2022-10-11  77

摸鱼学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" />
最新回复(0)