Android基础篇(一)

ImageView显示磁盘中的图片

Uri:是一通用的资源描述路径,可以描述文件、数据库数据、发短信、打开地图、打开浏览器等等

    结构:前缀+唯一标识符+路径
    http://www.baidu.com
    file:///mnt/sdcard/

显示本地图片

        //描述本地文件的路径
        Uri uri = Uri.parse("/mnt/sdcard/pic.jpg");
        ImageView iv = findViewById(R.id.iv);
        //显示图片
        iv.setImageURI(uri);

Uri也可以从File中获取

File f =new File("/mnt/sdcard/pic.jpg");
//从File对象中获取Uri
Uri uri = Uri.fromFile(f);

注意:从sd卡中加载图片,需要添加sd卡权限,添加方式是在AndroidMainfest.xml中添加,如下:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.xykj.day4"
android:versionCode="1"
android:versionName="1.0" >
...
<!--  读 sd 卡权限 -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
...
</application>
</manifest>

EditText输入框

继承自TextView,主要可以从键盘中接收用户输入的内容

<EditText
android:id="@+id/et"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/hint_test"
android:maxLines="3"
android:textColor="#ff0000"
android:textSize="20sp" />
<EditText
android:id="@+id/et_psw"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/hint_psw"
android:inputType="textPassword" />
常用属性
android:hint="@string/hint_psw" 设置输入提示 ( 有内容时自动隐藏 )
android:inputType="textPassword" 可输入类型:密码、电话号码、邮箱
android:imeOptions="actionNext" 改变 Enter 按钮的显示效果
actionNext 下一个、 actionGo 去往、 actionSearch 搜索、 actionDone 完成、 actionSend 发送

监听Enter按键

//  按键监听分为按下、弹起
private OnEditorActionListener onEnterListener = new OnEditorActionListener() {
    @Override
    public boolean onEditorAction(TextView v, int actionId,
    KeyEvent keyEvent) {
        //  表示当前 Enter 按键弹起
        //  获取输入框的 id
        int id = v.getId();
        if (id == R.id.et_name) {
            //  让输入框得到焦点(成为键盘输入内容的目标)
            etPsw.requestFocus();
        } else if (id == R.id.et_psw) {
            String str = etName.getText() + " " + etPsw.getText();
            et.setText(str);
        }
        return true;
    }
};

针对监听的返回值,false表示不拦截按键默认功能 (Enter 默认功能是换行 ) , true 表示拦截默认功能,监听方法中的 KeyEvent 表示按键的事件对象行为包括ACTIONDOWN 、 ACTIONUP 按下弹起等行为, KeyEvent 中还包括按键值

对输入框设置Enter按键监听

//输入框监听Enter按键
etName.setOnEditorActionListener(onEnterListener);
etPsw.setOnEditorActionListener(onEnterListener);

文本框内容变化监听

可以使用文本框使用addTextChangedListener方法添加一个TextWatcher 监听文本变化

// 监听输入的内容变化
etName.addTextChangedListener(new TextWatcher() {
    @Override
    public void onTextChanged(CharSequence s, int start, int end, int count) {
        Log.e("m_tag","onTextChanged:"+s);
    }
    @Override
    public void beforeTextChanged(CharSequence s, int start, int end,
    int count) {
        Log.e("m_tag","beforeTextChanged:"+s);
    }
    @Override
    public void afterTextChanged(Editable s) {
        Log.e("m_tag","afterTextChanged:"+s);
    }
});

文本内容替换

输入框中有时候需要进行内容替换,如密码字符用小圆点来替换,或者某种需要将小写替换为大写等等,需要使用 TransformationMethod 来进行处理,以密
码字符替换为例:

et.setTransformationMethod(PasswordTransformationMethod.getInstance());
如果需要查看实际的内容则
et.setTransformationMethod(null);

类似的还提供 SingleLineTransformationMethod 可以将换行符替换为空 ,’\r’ 换为空 ‘\n’ 换为空

文本内容过滤

可以通过设置键盘监听器的方式检测输入的内容,并且约束是否是规范的,如:

etPsw.setKeyListener(new DigitsKeyListener(){
    @Override
    protected char[] getAcceptedChars() {
        return new char[]{'a','b','1','2'};
    }
    @Override
    public int getInputType() {
        return InputType.TYPE_TEXT_VARIATION_PASSWORD;
    }
});

也可以使用系统中提供的监听器处理

TimeKeyListener 时间类型的输入,可以接收 0-9 、 'a' 、 'p' 、 'm' 、 ':'
实例化方式为 TimeKeyListener.getInstance()
DigitsKeyListener 只接收数字,
如果自己有约定的规则则可以重getAcceptedChars() 方法即可

选择框

继承自 CompoundButton , CompoundButton 继承自 Button ,在按钮基础上多了选择状态的指示,可以通过 checked 属性来改变状态,在 CompoundButton 中
提供 OnCheckedChangeListener 可以监听单个选择框的选择状态的变化

多选框
<CheckBox
android:id="@+id/ch_women"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=" 美女 "
android:checked="true" />

java中使用:

// 检测选择框是否被选中
boolean isCheck = chCar.isChecked();
监听状态变化
chCar.setOnCheckedChangeListener(new
CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton btn, boolean isChecked) {
            Log.e("m_tag"," 是否选中 :"+isChecked);
        }
    });
单选
单选按钮RadioButton要结合单选按钮组 (RadioGroup) 一起使用
<RadioGroup
    android:id="@+id/m_group"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical" >
<RadioButton
    android:id="@+id/radio_1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text=" 成都 " />
...
</RadioGroup>

java中使用:

RadioGroup group = (RadioGroup) findViewById(R.id.m_group);
// 获取选择结果
int id = group.getCheckedRadioButtonId();
监听选中变化
    group.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
    @Override
    public void onCheckedChanged(RadioGroup group, int checkId) {
            switch (checkId) {
                case R.id.radio_1:
            tvResult.setText(" 恭喜你答对了 ");
                break;
            default:
                tvResult.setText(" 回答错误 ");
            break;
        }
    }
});
清楚原来的选择

//清楚原来的选择状态

group.clearCheck();
 // 注意,该方法调用之后会触发 group 的监听器中的onCheckedChanged 方法并且选择的 id 为 -1

猜你喜欢

转载自blog.csdn.net/weixin_42097095/article/details/80574504