前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >EidtText

EidtText

作者头像
小小工匠
发布2021-08-16 10:12:30
6670
发布2021-08-16 10:12:30
举报
文章被收录于专栏:小工匠聊架构

概述

EditText是TextView的子类,因此TextView的一切xml属性同样也适用于EditText.

EidtText


像QQ一样输入表情图片

Demo:

代码语言:javascript
复制
public class InputTextAndPicAct extends Activity {

    private EditText et_input;
    private Button btn_insert;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_input_text_and_pic);

        initView();
    }

    private void initView() {

        et_input = (EditText) findViewById(R.id.id_et_inputMess);
        btn_insert = (Button) findViewById(R.id.id_btn_insertPic);

    }

    /**
     * 在xml中配置了android:onClick属性,监听点击事件
     *
     * @param view
     */
    public void insertPic(View view) {
        // 随机产生1到10的整数
        int random = 1 + new Random().nextInt(10);
        LogUtils.d("随机产生的整数:" + random);

        try {
            // 根据随机产生的整数从R.drawable类中获取相应的资源ID的Field对象
            Field field = R.drawable.class.getField("gur_project_" + random);
            // 获取资源id,也就是静态变量的值
            int resourceId = Integer.parseInt(field.get(null).toString());
            // 根据资源ID获取图像的Bitmap对象
            Bitmap bitmap = BitmapFactory.decodeResource(getResources(), resourceId);
            // 根据Bitmap创建ImageSpan对象
            ImageSpan imageSpan = new ImageSpan(this,bitmap);
            // 创建一个SpannableString对象,以便插入用ImageSpan对象封装的图像
            String text = "gur_project_";
            SpannableString spannableString = new SpannableString(text);
            // 用ImageSpan替换gur-project-
            spannableString.setSpan(imageSpan,0,text.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
            // 将随机获取的图像追加到EditText控件后
            et_input.append(spannableString);

        } catch (NoSuchFieldException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
    }
}

XML:

代码语言:javascript
复制
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#000">

    <EditText
        android:id="@+id/id_et_inputMess"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="10dp"
        android:background="#FFF"
        android:minLines="4"
        android:gravity="left|top"
        android:padding="10dp" />

    <Button
        android:id="@+id/id_btn_insertPic"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/id_et_inputMess"
        android:layout_margin="10dp"
        android:background="#FFF"
        android:padding="10dp"
        android:onClick="insertPic"
        android:text="随机插入表情" />

RelativeLayout>

在标签中我们设置了android:gravity的属性为left|top,以便输入的文本从左上角开始显示。因为设置了最小显示4行,如果不设置改属性,会从左侧中心位置开始显示,如果是单行就不会存在这个问题了。

我们将标签的android:onClick属性指定了单击事件的方法insertPic,在该方法中,随机获取gur_project_1到gur_project_10的任意一个资源的ID, 最常用的作法是将这个10个图片的资源ID放到一个数据里面,然后随机产生一个数组索引获取相应的资源ID,但是我们并没有采用这种方式,而是采用了直接通过反射技术从R.drawable类中获取图像资源ID的方法。 这种方法的好处是一旦图像非常的多,可以不需要在数组中逐个定义就可以获取到对应的资源ID了。

我们使用ImageSpan类来直接插入图像,当然了我们也可以采用

标签在EditText控件中插入图片,只是复杂一些,本案例没有采用。

注意事项:

  1. 由于R.drawable类中的资源ID都是public 的静态变量,因此我们可以直接使用Field.get方法获取这些变量的值。 如果是private或者protected类型的变量,需要field.setAccessible(true)来获取访问权限。
  2. 使用Field.get方法获取变量时,如果是静态变量,Field.get方法的参数可以设置为null即可,如果不是静态变量,则需要为Field.get方法指定一个变量所在类的对象作为参数值。
  3. 使用EditText类不能直接插入Span对象,因此需要先使用SpannableString对象来封装Span对象(例如本例中的ImageSpan对象),再将SpannableString对象插入到EditText控件中。

在EditText中输入特定的字符

EditText控件中可以通过多种方式指定允许输入的字符,比如指向输入0~9的数字 三种方式:

  • android:digits属性设置为0123456789
  • android:inputType属性设置为number
  • android:numeric设置为integer
代码语言:javascript
复制
"1.0" encoding="utf-8"?>
"http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#000"
    android:orientation="vertical"
    android:padding="10dp">


    "match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="10dp"
        android:background="#FFF"
        android:text="使用android:digits属性(输入数字)" />

    "@style/bg_white"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:digits="0123456789" />


    "match_parent"
        android:layout_height="wrap_content"
        style="@style/bg_white"
        android:text="使用adnroid:digits属性输入26个英文小写字母"/>

    "match_parent"
        android:layout_height="wrap_content"
        style="@style/bg_white"
        android:digits="abcdefghijklmnopqrstuvwxyz"/>



    "match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="10dp"
        android:background="#FFF"
        android:text="使用android:inputType属性(输入数字)" />

    "@style/bg_white"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="number" />


    "match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="10dp"
        android:background="#FFF"
        android:text="使用android:inputType属性(输入Email)" />

    "@style/bg_white"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="textEmailAddress" />

当界面后面的EditText控件中的输入文本的时候会弹出系统软键盘,并且整个界面会上衣,以便显示当前正处于焦点的EditText,如果处于某种需要,不想让界面上移,可以使用getWindows().setSoftInputMode()将输入法模式设置为WindowManager,LayoutParamas.SOFT_INPUT_ADJSUT_RESIZE.

代码语言:javascript
复制
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);

AutoCompleteTextView和MultiAutoCompleteTextView

AutoCompleteTextView是对EditText的扩展,它的父类是EditText.

  1. 使用AutoCompleteTextView标签
  2. 为AutoCompleteTextView设置adapter
代码语言:javascript
复制
public class AutoCompleteTextViewAct extends Activity {

    private AutoCompleteTextView actv ;
    private MultiAutoCompleteTextView mActv;

    private String[] array = new String[]{"周杰伦","周公举","周恩来","Google","Google Map","Google Android","Java"};;



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_auto_complete_text_view);

        initView();

        initViewMulti();
    }



    private void initView() {
        actv = (AutoCompleteTextView)findViewById(R.id.id_actv);

        ArrayAdapter adapter = new ArrayAdapter(this,android.R.layout.simple_dropdown_item_1line,array);

        actv.setAdapter(adapter);
    }


    private void initViewMulti() {

        mActv = (MultiAutoCompleteTextView) findViewById(R.id.id_actv_multi);

        ArrayAdapter adapter = new ArrayAdapter(this,android.R.layout.simple_dropdown_item_1line,array);

        mActv.setAdapter(adapter);
        // 指定多个字符串的分隔符为逗号
        mActv.setTokenizer(new MultiAutoCompleteTextView.CommaTokenizer());
    }



}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016/01/18 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 概述
  • 像QQ一样输入表情图片
  • 在EditText中输入特定的字符
  • AutoCompleteTextView和MultiAutoCompleteTextView
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档