摸鱼学Android 十一(控件1)

分辨率

  • VGA(Video Graphics Array):640*480
  • WVGA(Wide VGA):800×480
  • HVGA(Half-size VGA):480*320
  • QVGA(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.bat
  • NinePatchEditor

UI控件之一

1 TextView(文本框)

1.1 基本属性

  • text:设置显示的文本内容,一般是把字符串写到string.xml文件中,然后通过@String/xxx取得对应的字符串内容
  • textColor:设置字体颜色,同上,通过colors.xml资源来引用
  • textColorHighlight:选中文本的底色,默认蓝色
  • textStyle:设置字体风格,三个可选值:normal(无效果),bold(加粗),italic(斜体)
  • textSize:字体大小,单位一般是用sp
  • textScaleX:字的水平间距
  • textScaleY:字的垂直间距
  • typeface:字型,normal, sans, serif, monospace
  • height:设置高度(一般使用dp)
  • width:设置宽度(一般使用dp)
  • gravity:对齐方式,文本内容相对于文本框的位置
  • background:控件的背景颜色,可以是颜色,可以是图片,也可以是自定义的ShapeDrawable资源文件

1.2 特殊属性

阴影:

  • shadowColor:设置阴影颜色,需要与shadowRadius一起使用
  • shadowRadius:设置阴影的模糊程度,设为0.1就变成字体颜色了,建议使用3.0
  • shadowDx:设置阴影在水平方向的偏移
  • 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 设置清空文本图标

  1. 为EditText设置addTextChangedListener
  2. 重写TextWatcher()里的抽象方法,监听输入框变化
  3. setCompoundDrawablesWithIntrinsicBounds设置打叉图片
  4. 重写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 按钮按下效果

  1. 定义选择器 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>
  1. 设置按钮背景
    <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:选中状态,默认true
  • button:设置为null则不显示原形按钮

5.2 单选功能

把RadioButton放到RadioGroup按钮组中
RadioGroup属性:

  • orientation:排列方式,[ horizontal | vertical ]
  • checkedButton:默认选中

6 CheckBox(复选框)

属性与RadioButton基本一致

7 ToggleButton(切换按钮)

7.1 基本属性

属性继承Button。

  • disabledAlpha:禁用时的透明度,默认0.5
  • textOff:未选中时的文本,默认Off
  • textOn:选中时的文本,默认On
  • checked:选中状态,默认false

7.2 图片切换

  1. 定义选择器,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>
  1. 设置按钮
<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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值