自定义View–登录界面输入框

普普通通意况下,进入Windows界面以前都有三个报到进程,怎么着在报到前让系统执行脚本呢?下边介绍一种方法。

成效展现

图片 1

预览界面.png

图片 2

作用突显

从图中得以观察这一次自定义View的效益。具体效率如下:

  • 安装尾部文字的字体大小、字体颜色、文字内容

  • 设置输入框的字体大小、字体颜色、文字内容、提醒文字

1.开拓组策略,在Run(运转)中输入GREDIT.MSC,点击确认。

起来自定义

壹 、第贰步先新建壹个类名为艾德itTextPlus(可协调取名)继承FrameLayout的文件,因为我们要促成在布局文件中能是用自个儿的性质,所以大家还要在values目录下新建attrs.xml文件(用于添加自定义的性子)

图片 3

第1步.png


二 、在 attrs.xml
文件中添加如下属性(其中除了字体的骨干品质之外,还包含了输入框的输入类型,键盘的品种等)

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <declare-styleable name="EditTextPlus">
        <attr name="head_title_text" format="string" />
        <attr name="head_titile_text_size" format="dimension" />
        <attr name="head_title_text_color" format="color" />
        <attr name="edit_hint_text" format="string" />
        <attr name="edit_text_size" format="dimension" />
        <attr name="edit_text_color" format="color" />
        <attr name="edit_input_type" format="enum">
            <enum name="Text" value="0" />
            <enum name="Phone" value="1" />
            <enum name="Password" value="2" />
            <enum name="Number" value="3" />
        </attr>
            <!-- 键盘类型 -->
        <attr name="edit_editor_option" format="enum">
            <enum name="IME_ACTION_NONE" value="0" />
            <enum name="IME_ACTION_DONE" value="1" />
            <enum name="IME_ACTION_GO" value="2" />
            <enum name="IME_ACTION_NEXT" value="3" />
            <enum name="IME_ACTION_PREVIOUS" value="4" />
            <enum name="IME_ACTION_SEARCH" value="5" />
            <enum name="IME_ACTION_SEND" value="6" />
            <enum name="IME_ACTION_UNSPECIFIED" value="7" />
        </attr>
    </declare-styleable>
</resources>

那就是说添加了那一个属性之后要怎么样运用啊?如下图所示:

图片 4

使用自定义属性.png

内部最重点的是要使用上面那句话,才能使用自定义的品质。(xmlns:app中的app命名能够无限制)

         xmlns:app="http://schemas.android.com/apk/res-auto"

三 、在布局文件中一度选择了自定义的性质,那么大家后天要做的就是什么分析相关属性。所以大家回来EditTextPlus类中。

图片 5

表明的积极分子变量.png

上图为类中宣示的积极分子变量。

  • 在条分缕析的时候我们经过 AttributeSet 来拿到 TypeArray(注意: 必须要调用
    recycle 方法举行回收)

  • 不一样档次的品质使用区其余点子来取得,而且必须设置暗中认同值,在用户没有安装属性的时候,使用暗许值

  • 内部经过 typedArray.getDimension
    方法取得的参数单位为像素(px)。在应用的时候要小心单位的倒车,所以在安装默认值得时候,将
    sp 转化为 px

  • edit_editor_option 和 edit_input_type 为枚举类型,在 attrs.xml
    文件中宣示了各样枚举对应的 value

图片 6

实际分析自定义属性的代码如下:

private void initAttr(AttributeSet attrs) {
    Drawable background = getBackground();
    //当没有设置background时使用默认的background
    if (null == background) {
        setBackgroundResource(R.drawable.drawable_default_edittext_plus);
    }
    TypedArray typedArray = mContext.obtainStyledAttributes(attrs, R.styleable.EditTextPlus);
    //
    mEditTextSize = typedArray.getDimension(R.styleable.EditTextPlus_edit_text_size, sp2px(mEditTextSize));
    mEditHintText = typedArray.getString(R.styleable.EditTextPlus_edit_hint_text);
    if (TextUtils.isEmpty(mEditHintText)) {
        mEditHintText = "";
    }
    mEditTextColor = typedArray.getColor(R.styleable.EditTextPlus_edit_text_color,
            ContextCompat.getColor(mContext, R.color.EditTextPlusDefaultTextColor));
    mInputType = typedArray.getInt(R.styleable.EditTextPlus_edit_input_type, mInputType);
    mEditorOption = typedArray.getInt(R.styleable.EditTextPlus_edit_editor_option, mEditorOption);
    //
    mHeadTextSize = typedArray.getDimension(R.styleable.EditTextPlus_head_titile_text_size, sp2px(mHeadTextSize));
    mHeadText = typedArray.getString(R.styleable.EditTextPlus_head_title_text);
    if (TextUtils.isEmpty(mHeadText)) {
        mHeadText = "未设置";
    }
    mHeadTextColor = typedArray.getColor(R.styleable.EditTextPlus_head_title_text_color, mEditTextColor);
    //
    typedArray.recycle();
}

2.顺序点击Computer Configuration -> Windows Settings ->
Scripts(Startup/Shutdown)

取得属性方法的调用顺序如下

图片 7

构造方法以及initAttr 和 initView方法.png

  • 在1个参数构造方法中调用五个参数的构造方法,在八个参数的构造方法中调用多少个参数的构造方法。这规范全数的构造方法都会由此几个参数的构造方法

  • 在构造方法中填充布局,调用 initAttr 得到各种属性的值,再调用
    initView 设置对应属性的值。


四 、既然设置自定义属性的值,并且属性都安装到相应的地方。最后3个标题,就是何许将自定义View中的事件传输出去,如:删除按钮的点击事件。

  • 在类中扬言接口

public interface OnDeleteListener {
    void onDelete();
}
  • 在类中声称成员变量 onDeleteListener

图片 8

宣示接口的分子变量.png

  • 讲明变量的 set 方法

    public void setOnDeleteListener(OnDeleteListener onDeleteListener) {
           this.onDeleteListener = onDeleteListener;
     }
    
  • 在 initView 中设置点击事件,并判断是还是不是讲明的 onDeleteListener
    是或不是为空,不为空则调用接口中的方法

     ivDelete.setOnClickListener(new OnClickListener() {
          @Override
          public void onClick(View view) {
              etInput.setText("");
              if (mHasDeleteAnimator) {
              //为了实现在点击删除时,控件左右抖动的效果
                  EditTextPlus.this.animate().translationX(5).setInterpolator(new CycleInterpolator(3)).setDuration(500).start();
              }
              if (null != onDeleteListener) {
                  onDeleteListener.onDelete();
              }
          }
      });
    
  • 利用该接口的时候就一定于设置系统控件的点击事件相同,调用
    setOnDeleteListener 方法。

图片 9

自定义接口的行使.png

GitHub地址:
EditextDemo

图片 10

3.在左边双击Stratup,出现如图弹窗,可在此添加cmd大概PowerShell脚本。

图片 11

4.点击确认

重启,在下次登录Windows界面前,系统会自动执行所添加的本子。

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图