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

平常情形下,步向Windows分界面早先皆有八个签到进程,怎样在签到前让系统推行脚本呢?上边介绍大器晚成种艺术。

图片 1预览分界面.png图片 2意义突显

1.开发组攻略,在Run(运转卡塔尔国中输入GREDIT.MSC,点击确认。

从图中得以看见此番自定义View的法力。具体效果如下:

图片 3

  • 设置尾部文字的字体大小、字体颜色、文字内容

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

2.相继点击计算机 Configuration -> Windows Settings ->
Scripts(Startup/Shutdown)

少年老成、
第一步先新建二个类名字为EditTextPlus世袭FrameLayout的文书,因为大家要得以完成在布局文件中能是用本身的属性,所以大家还要在values目录下新建attrs.xml文件(用于增多自定义的质量)

图片 4

图片 5第1步.png

3.在侧面双击Stratup,现身如图弹窗,可在那增添cmd恐怕PowerShell脚本。

二、在 attrs.xml
文件中增多如下属性(当中除了字体的主干质量之外,还包罗了输入框的输入类型,键盘的类型等)

图片 6

<?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.点击确认

那便是说加多了这个属性之后要如何使用啊?如下图所示:

重启,在下一次报到Windows界眼下,系统会自动施行所添加的台本。

图片 7选拔自定义属性.png

 

里头最重大的是要利用下边这句话,本事动用自定义的性子。(xmlns:app中的app命名可以自由)

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

三、在布局文件中早就采纳了自定义的属性,那么我们现在要做的正是如何剖判相关属性。所以大家重回EditTextPlus类中。

图片 8宣示的分子变量.png

上海教室为类中声称的成员变量。

  • 在解析的时候大家通过 AttributeSet 来得到 TypeArray(注意: 一定要调用
    recycle 方法进行回笼)

  • 昨今区别品种的属性使用差别的章程来收获,何况必得设置暗中同意值,在客商并未设置属性的时候,使用默许值

  • 里面经过 typedArray.getDimension
    方法获得的参数单位为像素。在使用的时候要留意单位的转会,所以在装置暗许值得时候,将
    sp 转变为 px

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

具体深入分析自定义属性的代码如下:

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();}

收获属性方法的调用顺序如下

图片 9构造方法甚至initAttr
和 initView方法.png

  • 在一个参数构造方法中调用三个参数的构造方法,在五个参数的构造方法中调用七个参数的构造方法。那规范全数的构造方法都会由此八个参数的构造方法

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

四、既然设置自定义属性的值,何况属性都安装到相应的岗位。最终三个主题素材,就是哪些将自定义View中的事件传输出去,如:删除按键的点击事件。

  • 在类中声称接口

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

图片 10注明接口的分子变量.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.setInterpolator(new CycleInterpolator.setDuration.start(); } if (null != onDeleteListener) { onDeleteListener.onDelete;
    
  • 应用该接口的时候就也就是设置系统控件的点击事件相同,调用
    setOnDeleteListener 方法。

图片 11自定义接口的运用.png

GitHub地址: EditextDemo

发表评论

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

网站地图xml地图