成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術文章
文章詳情頁

Android 實現帶頭部文字輸入框的自定義控件

瀏覽:89日期:2022-09-19 16:12:03
前言

在app的輸入框中,需要應用到很多帶有前綴說明的輸入框,運用原有的輸入框和文本控件,一個帶頭部的輸入框就會增加三個控件在layout文件中。當布局文件輸入框較少的情況下,這樣對后期維護影響不大,但在多個帶頭部的輸入框下,布局文件代碼量會很大,影響閱讀以及后期維護。而封裝過后的控件,在使用中僅僅需要幾行代碼可實現幾十行的效果。

簡介 帶頭部文字的輸入框 可在xml定義頭部文字樣式 可在xml定義輸入框樣式 可在xml定義提示文字樣式 可在xml定義頭部和輸入框的間距和邊距 效果圖

Android 實現帶頭部文字輸入框的自定義控件

使用方法

<com.momin.common.widget.EditInputView android:layout_width='match_parent' android:layout_height='50dp' app:inputMarginStart='10dp' app:headerText='姓名' app:hint='請輸入聯系人姓名' app:inputType='text' app:maxLength='30'/>源碼在這

有幫助請點個贊

attrs.xml 屬性文檔

<!-- 公共屬性 --><!-- 前置文字內容 --><attr name='headerText' format='string'/><!-- 前置文字大小 --><attr name='headerTextSize' format='dimension'/><!-- 前置文字大小 --><attr name='headerTextStyle'> <flag name='normal' value='0' /> <flag name='bold' value='1' /> <flag name='italic' value='2' /></attr><!-- 前置文字顏色 --><attr name='headerTextColor' format='reference|color'/><!-- 前置文字左邊間距 --><attr name='headerPaddingStart' format='dimension'/><!-- 前置文字右邊間距 --><attr name='headerPaddingEnd' format='dimension'/><!-- 前置文字頂部間距 --><attr name='headerPaddingTop' format='dimension'/><!-- 前置文字底部間距 --><attr name='headerPaddingBottom' format='dimension'/><!-- 公共屬性 --><!-- 帶前置文字的輸入框 --><declare-styleable name='EditInputView'> <!-- 文字內容 --> <attr name='text' format='string'/> <!-- 文字大小 --> <attr name='textSize' format='dimension'/> <!-- 文字顏色 --> <attr name='textColor' format='reference|color'/> <!-- 最大輸入字符數 --> <attr name='maxLength' format='integer'/> <!-- 輸入限制 --> <attr name='android:enabled'/> <!-- 輸入類型 --> <attr name='android:inputType'/> <!-- 輸入開始邊距 --> <attr name='inputMarginStart' format='dimension'/> <!-- 輸入結束邊距 --> <attr name='inputMarginEnd' format='dimension'/> <!-- 輸入頂部邊距 --> <attr name='inputMarginTop' format='dimension'/> <!-- 輸入底部邊距 --> <attr name='inputMarginBottom' format='dimension'/> <!-- 輸入開始間距 --> <attr name='inputPaddingStart' format='dimension'/> <!-- 輸入結束間距 --> <attr name='inputPaddingEnd' format='dimension'/> <!-- 輸入頂部間距 --> <attr name='inputPaddingTop' format='dimension'/> <!-- 輸入底部間距 --> <attr name='inputPaddingBottom' format='dimension'/> <!-- 輸入底部間距 --> <attr name='android:gravity'/> <!-- 提示文字 --> <attr name='hint' format='string'/> <!-- 提示文字顏色 --> <attr name='hintColor' format='reference|color'/> <!-- 前置文字內容 --> <attr name='headerText'/> <!-- 前置文字大小 --> <attr name='headerTextSize'/> <!-- 前置文字大小 --> <attr name='headerTextStyle'/> <!-- 前置文字顏色 --> <attr name='headerTextColor'/> <!-- 前置文字左邊間距 --> <attr name='headerPaddingStart'/> <!-- 前置文字右邊間距 --> <attr name='headerPaddingEnd'/> <!-- 前置文字頂部間距 --> <attr name='headerPaddingTop'/> <!-- 前置文字底部間距 --> <attr name='headerPaddingBottom'/></declare-styleable>

common_edit_input_view.xml 布局文件

<?xml version='1.0' encoding='utf-8'?><RelativeLayout xmlns:android='http://schemas.android.com/apk/res/android' android:layout_width='match_parent' android:layout_height='match_parent'> <!-- 頭部文字 --> <TextViewandroid: android:layout_width='wrap_content'android:layout_height='match_parent'android:gravity='start|center_vertical'/> <!-- 輸入框 --> <EditTextandroid: android:layout_toEndOf='@id/tv_edit_head'android:layout_width='match_parent'android:layout_height='match_parent'android:singleLine='true'android:background='@null'android:textColor='@color/c_2B303C'android:gravity='end|center_vertical'/></RelativeLayout>

EditInputView.java 控件類

package com.momin.common.widget;import android.content.Context;import android.content.res.TypedArray;import android.graphics.Typeface;import android.text.InputFilter;import android.text.TextUtils;import android.util.AttributeSet;import android.view.Gravity;import android.view.LayoutInflater;import android.view.inputmethod.EditorInfo;import android.widget.EditText;import android.widget.RelativeLayout;import android.widget.TextView;import androidx.annotation.ColorRes;import androidx.annotation.NonNull;import androidx.annotation.Nullable;import androidx.core.content.ContextCompat;import com.momin.common.R;/** * <p>Title: EditInputView</p> * <p>Description: 帶頭部輸入框 </p> * <p>Copyright: </p> * <p>Company: </p> * * @author Momin * @version 1.0 * @date 2021/3/10 18:00 */public class EditInputView extends RelativeLayout { TextView tvHead; EditText etInput; public EditInputView(Context context) {super(context);init(context, null); } public EditInputView(@NonNull Context context, @Nullable AttributeSet attrs) {super(context, attrs);init(context, attrs); } /** * 初始化 * * @param context 上下文 * @param attrs 資源 */ private void init(Context context, AttributeSet attrs) {// 初始化對象initView(context);// 獲取資源對象TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.EditInputView);// 初始化輸入框initEdit(context, typedArray);// 初始化頭部文字CharSequence headText = typedArray.getText(R.styleable.EditInputView_headerText);if (TextUtils.isEmpty(headText)) { // 頭部為空時 tvHead.setVisibility(GONE);} else { // 頭部不為空時 tvHead.setVisibility(VISIBLE); initHeaderText(context, typedArray, headText);}// 回收資源對象typedArray.recycle(); } /** * 初始化視圖 * * @param context 上下文 */ private void initView(Context context) {LayoutInflater.from(context).inflate(R.layout.common_edit_input_view, this);tvHead = findViewById(R.id.tv_edit_head);etInput = findViewById(R.id.et_edit_input); } /** * 初始化輸入框 * * @param context 上下文 * @param typedArray 資源對象 */ private void initEdit(Context context, TypedArray typedArray) {// 初始內容CharSequence editText = typedArray.getText(R.styleable.EditInputView_text);if (!TextUtils.isEmpty(editText)) { etInput.setText(editText);}// 字體大小setViewTextSize(etInput, R.styleable.EditInputView_textSize, typedArray);// 字體顏色setViewTextColor(context, etInput, R.styleable.EditInputView_textColor, typedArray);// 設置間距setEditPadding(typedArray);// 設置邊距setEditMargin(typedArray);// 輸入類型限制setLimitInputType(typedArray);// 輸入長度限制setLimitInputLen(typedArray);// 輸入限制:可輸入性setInputBoolean(typedArray);// 輸入字體排列位置setInputGravity(typedArray);initEditHint(context, typedArray); } /** * 設置字體大小 * * @param view 被設置對象 * @param attrId屬性Id * @param typedArray 資源對象 */ private void setViewTextSize(TextView view, int attrId, TypedArray typedArray) {float size = typedArray.getDimension(attrId, 14 * view.getPaint().density);view.getPaint().setTextSize(size); } /** * 設置字體風格 * * @param view 被設置對象 * @param attrId屬性Id * @param typedArray 資源對象 */ private void setViewTextStyle(TextView view, int attrId, TypedArray typedArray) {int style = typedArray.getInt(attrId, Typeface.NORMAL);view.setTypeface(Typeface.defaultFromStyle(style)); } /** * 設置字體顏色 * * @param context 上下文 * @param view 被設置對象 * @param attrId屬性Id * @param typedArray 資源對象 */ private void setViewTextColor(Context context, TextView view, int attrId, TypedArray typedArray) {int color = typedArray.getColor(attrId,ContextCompat.getColor(context, R.color.c_2B303C));view.setTextColor(color); } /** * 設置輸入框間距 * * @param typedArray 資源對象 */ private void setEditPadding(TypedArray typedArray) {// 開始間距int paddingStart = (int)typedArray.getDimension(R.styleable.EditInputView_inputPaddingStart, 0);// 結束間距int paddingEnd = (int)typedArray.getDimension(R.styleable.EditInputView_inputPaddingEnd, 0);// 頂部間距int paddingTop = (int)typedArray.getDimension(R.styleable.EditInputView_inputPaddingTop, 0);// 底部間距int paddingBottom = (int)typedArray.getDimension(R.styleable.EditInputView_inputPaddingBottom, 0);etInput.setPadding(paddingStart, paddingTop, paddingEnd, paddingBottom); } /** * 設置輸入框邊距 * * @param typedArray 資源對象 */ private void setEditMargin(TypedArray typedArray) {// 開始邊距int marginStart = (int)typedArray.getDimension(R.styleable.EditInputView_inputMarginStart, 0);// 結束邊距int marginEnd = (int)typedArray.getDimension(R.styleable.EditInputView_inputMarginEnd, 0);// 頂部邊距int marginTop = (int)typedArray.getDimension(R.styleable.EditInputView_inputMarginTop, 0);// 底部邊距int marginBottom = (int)typedArray.getDimension(R.styleable.EditInputView_inputMarginBottom, 0);LayoutParams layoutParams = (LayoutParams)etInput.getLayoutParams();layoutParams.setMargins(marginStart, marginTop, marginEnd, marginBottom);etInput.setLayoutParams(layoutParams); } /** * 設置輸入類型限制 * * @param typedArray 資源對象 */ private void setLimitInputType(TypedArray typedArray) {etInput.setInputType(typedArray.getInt(R.styleable.EditInputView_android_inputType, EditorInfo.TYPE_NULL)); } /** * 設置輸入長度限制 * * @param typedArray 資源對象 */ private void setLimitInputLen(TypedArray typedArray) {int len = typedArray.getInteger(R.styleable.EditInputView_maxLength, 0);if (len > 0) { setMaxLength(len);} } /** * 輸入限制:可輸入性 * * @param typedArray 資源對象 */ private void setInputBoolean(TypedArray typedArray) {etInput.setEnabled(typedArray.getBoolean(R.styleable.EditInputView_android_enabled, true)); } /** * 輸入字體排列位置 * * @param typedArray 資源對象 */ private void setInputGravity(TypedArray typedArray) {etInput.setGravity(typedArray.getInt(R.styleable.EditInputView_android_gravity,Gravity.END|Gravity.CENTER_VERTICAL)); } /** * 初始化輸入框提示文字 * * @param context 上上下文 * @param typedArray 資源對象 */ private void initEditHint(Context context, TypedArray typedArray) {CharSequence hintText = typedArray.getText(R.styleable.EditInputView_hint);if (!TextUtils.isEmpty(hintText)) { // 提示文字不為空 // 提示內容 etInput.setHint(hintText); // 提示文字顏色 int color = typedArray.getColor(R.styleable.EditInputView_hintColor, ContextCompat.getColor(context, R.color.c_D2D0DC)); etInput.setHintTextColor(color);} } /** * 初始化頭部文字 * * @param context 上下文 * @param typedArray 資源對象 * @param text 頭部文字 */ private void initHeaderText(Context context, TypedArray typedArray, CharSequence text) {// 頭部字體風格setViewTextStyle(tvHead, R.styleable.EditInputView_headerTextStyle, typedArray);// 頭部字體顏色setViewTextColor(context, tvHead, R.styleable.EditInputView_headerTextColor, typedArray);// 頭部字體大小setViewTextSize(tvHead, R.styleable.EditInputView_headerTextSize, typedArray);// 頭部開始間距int paddingStart = (int)typedArray.getDimension(R.styleable.EditInputView_headerPaddingStart, 0);// 頭部結束間距int paddingEnd = (int)typedArray.getDimension(R.styleable.EditInputView_headerPaddingEnd, 0);// 頭部頂部間距int paddingTop = (int)typedArray.getDimension(R.styleable.EditInputView_headerPaddingTop, 0);// 頭部底部間距int paddingBottom = (int)typedArray.getDimension(R.styleable.EditInputView_headerPaddingBottom, 0);tvHead.setText(text);tvHead.setPadding(paddingStart, paddingTop, paddingEnd, paddingBottom); } /** * 設置頭部內容 * * @param text 被設置內容 */ public void setHeadText(CharSequence text) {if (tvHead != null) { tvHead.setText(text);} } /** * 獲取內容 * * @return 內容 */ public CharSequence getText() {if (etInput == null) { return null;} else { return etInput.getText();} } /** * 設置內容 * * @param text 被設置內容 */ public void setText(CharSequence text) {if (etInput != null) { etInput.setText(text);} } /** * 設置內容顏色 * * @param colorId 顏色資源Id */ public void setTextColor(@ColorRes int colorId) {if (etInput != null) { etInput.setTextColor(ContextCompat.getColor(getContext(), colorId));} } /** * 設置最大輸入限制 * * @param len 限制值 */ public void setMaxLength(int len) {etInput.setFilters(new InputFilter[]{new InputFilter.LengthFilter(len)}); } public TextView getHeadTextView() {return tvHead; } public EditText getInputEditView() {return etInput; }}

以上就是Android 實現帶頭部文字輸入框的自定義控件的詳細內容,更多關于Android 文字輸入框的自定義控件的資料請關注好吧啦網其它相關文章!

標簽: Android
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
成人av在线电影| 国产精品69毛片高清亚洲| 风间由美中文字幕在线看视频国产欧美| 精品国产污网站| 久久国产88| 女人天堂亚洲aⅴ在线观看| 亚洲精品福利视频网站| 欧美蜜桃一区二区三区| 国内久久精品| 国产成人自拍网| 亚洲成人黄色小说| 国产日韩欧美不卡在线| 欧美日韩一区成人| 国产精品资源| 国产一区二区久久久| 国产精品国产三级国产普通话三级| 日韩激情一二三区| 黄页网站大全一区二区| 韩国三级在线一区| 国产黑丝在线一区二区三区| 国产精品亚洲成人| 久久精品国产99国产| 国产精品久久久久久久久婷婷| 欧美精品久久一区二区三区| 国产精品麻豆久久久| 日韩午夜三级在线| proumb性欧美在线观看| 图片区小说区国产精品视频| 国产欧美日韩在线观看| 91精品国产综合久久久久久久| 国产精品一区视频| 亚洲欧洲日本国产| 久久久另类综合| 91麻豆精品91久久久久同性| 久久精品国产第一区二区三区最新章节| 国产乱人伦精品一区二区在线观看| 一区二区三区波多野结衣在线观看| 精品女同一区二区| 日韩视频不卡中文| 欧美日韩中文字幕一区| 麻豆成人av| 久久九九国产| 另类激情亚洲| 西西人体一区二区| 一色屋精品视频在线观看网站| 午夜国产精品视频免费体验区| 99久久久国产精品免费蜜臀| 国产91精品在线观看| 狠狠色2019综合网| 男女视频一区二区| 蜜臀av亚洲一区中文字幕| 美女性感视频久久| 麻豆国产精品官网| 黑人巨大精品欧美黑白配亚洲| 国内精品久久久久影院一蜜桃| 日韩成人一区二区三区在线观看| 午夜精品久久久久久久99水蜜桃 | 久久久久免费| 六月丁香综合| 一本色道久久综合狠狠躁的推荐| 久久一区二区三区av| 久久久久九九九| 欧美日韩精品综合在线| 欧美二区在线观看| 26uuu色噜噜精品一区| 国产精品全国免费观看高清| 欧美一区二区三区免费视频 | 久久综合九色综合欧美亚洲| 久久网站最新地址| 亚洲免费伊人电影| 国产一级精品在线| 欧美久久99| 中文久久精品| 在线精品视频免费播放| 亚洲精品一线二线三线无人区| 日本一区二区电影| 日韩激情中文字幕| 99久久99精品久久久久久| 亚洲人成网站在线观看播放| 911精品产国品一二三产区| 中国av一区二区三区| 国内精品免费**视频| 亚洲国产1区| 欧美高清dvd| 国产精品久久综合| 国产在线看一区| 亚洲日韩成人| 日韩色在线观看| 亚洲自拍另类综合| www.一区二区| 欧美在线一区二区三区| 亚洲欧洲av在线| 粉嫩久久99精品久久久久久夜| 亚洲一区二区三区免费观看| 亚洲精品在线观看网站| 日韩不卡在线观看日韩不卡视频| 国产精品xvideos88| 欧美一区二区三区免费在线看| 一区二区三区欧美在线观看| 国产成人99久久亚洲综合精品| 久久av最新网址| 亚洲日本免费电影| 91在线播放网址| 日韩午夜激情免费电影| 琪琪久久久久日韩精品| 亚洲美洲欧洲综合国产一区| 久久久www免费人成精品| 国产一区二区久久| 在线一区二区三区| 亚洲午夜羞羞片| 9色精品在线| 有坂深雪av一区二区精品| 99国产精品99久久久久久| 欧美影视一区二区三区| 首页欧美精品中文字幕| 中文亚洲字幕| 一区二区三区日韩精品| 国产精品日韩高清| 国产精品久久久久aaaa| 欧美在线视屏| 国产欧美视频在线观看| 色综合一个色综合亚洲| www日韩大片| 99re在线视频这里只有精品| 欧美大片在线观看一区| 国产精品自拍网站| 日韩一区二区视频在线观看| 国内精品免费**视频| 欧美精品乱人伦久久久久久| 国产一区二区91| 91精品婷婷国产综合久久性色| 国内精品自线一区二区三区视频| 欧美伦理影视网| 不卡视频在线看| 国产视频在线观看一区二区三区| 亚洲欧美伊人| 亚洲欧美国产三级| 亚洲欧美大片| 久久精品国产网站| 欧美精品日韩精品| 91同城在线观看| 亚洲女人的天堂| 色94色欧美sute亚洲线路一ni| 热久久一区二区| 欧美精品三级日韩久久| 国产69精品久久99不卡| 欧美韩国日本一区| 99精品国产福利在线观看免费 | 粉嫩aⅴ一区二区三区四区| 欧美一区二区三区在线看| 欧美成人一品| 午夜欧美视频在线观看| 欧美三级韩国三级日本一级| 国产精品 日产精品 欧美精品| 亚洲国产精品传媒在线观看| 免费日韩精品中文字幕视频在线| 久久国产精品99久久久久久老狼| 日韩一级免费一区| 亚洲一区二区伦理| 精品一区二区免费视频| 国产在线一区观看| 国产精品一区二区三区99| 蜜臀av性久久久久av蜜臀妖精| 蜜臀久久久99精品久久久久久| 国产一区二区三区无遮挡| 欧美手机在线视频| 久久亚洲影视婷婷| 一个色在线综合| 亚洲国产三级在线| 国产精品一区二区你懂的| 国产欧美二区| 欧美激情五月| 日韩欧美一级精品久久| 久久久精品中文字幕麻豆发布| 国产精品电影一区二区三区| 日本欧美一区二区在线观看| 亚洲午夜久久久久久久久久久| 麻豆精品视频在线观看免费| 欧美久久影院| 色吧成人激情小说| 亚洲欧美色图小说| www.日韩大片| 91久久精品国产91久久性色tv| 欧美91福利在线观看| 国产自产高清不卡| 韩国一区二区三区| 韩国成人在线视频| 久久国产成人午夜av影院| 日韩1区2区3区| 毛片av中文字幕一区二区| 国产精品乱码人人做人人爱| 国产亚洲一本大道中文在线| 久久婷婷色综合| 亚洲国产精品ⅴa在线观看| 精品国产3级a| 亚洲国产精品成人综合色在线婷婷 | 欧美xxx久久| 7777精品伊人久久久大香线蕉最新版| 在线视频国产一区| 91国产福利在线|