日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

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

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

瀏覽:116日期: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
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产伦精品一区二区三区千人斩| 日本不卡视频在线观看| 深夜日韩欧美| 激情欧美亚洲| 国产国产精品| 香蕉视频成人在线观看| 中文字幕一区二区av| 日韩不卡手机在线v区| 国产三级一区| 国产成人精品福利| 成人啊v在线| 久久蜜桃精品| 香蕉久久久久久久av网站| 亚洲美女91| 国产美女亚洲精品7777 | 欧美国产另类| 97在线精品| 日韩免费av| 亚洲精品一区二区在线看| 视频一区二区三区入口| 欧美亚洲免费| 国产高清不卡| 亚洲一区导航| 国产一区二区三区国产精品| 国产精品88久久久久久| 欧美一级网址| 久久精品国产68国产精品亚洲| 亚洲欧洲免费| 日韩欧美看国产| 日韩中文av| 激情国产在线| 日韩和欧美一区二区三区| 欧美成人一二区| 午夜久久免费观看| 国产精品天堂蜜av在线播放| 播放一区二区| 97精品国产99久久久久久免费| 欧美日韩免费看片| 日韩黄色免费网站| 女人av一区| 欧美黄页在线免费观看| 国产亚洲一级| 日韩成人免费| 日韩激情av在线| 激情综合网五月| 国产欧美自拍| av资源中文在线| 亚洲精品乱码久久久久久蜜桃麻豆| 久久久久久久欧美精品| 亚洲最大av| 国产在视频一区二区三区吞精| 国产精品美女久久久| 欧美日韩夜夜| 亚洲女同中文字幕| 国产精品伊人| 久久www成人_看片免费不卡| 国产精品香蕉| 精品精品99| 美女精品在线| 超级白嫩亚洲国产第一| 国产精品一区高清| 激情综合网站| 美女av在线免费看| 三级久久三级久久久| 久久国产成人午夜av影院宅| 日韩国产91| 一区二区国产在线观看| 日韩欧美精品一区| 欧美经典一区| 欧美精选一区二区三区| 国产一区二区精品久| 亚洲精品第一| 91精品一区国产高清在线gif| 国产精品66| 石原莉奈在线亚洲二区| 亚洲夜间福利| 手机在线电影一区| 久久av网站| 午夜久久av | 日本色综合中文字幕| 亚洲va在线| 久久wwww| 日韩精品欧美大片| 好吊日精品视频| 午夜一级久久| 电影亚洲精品噜噜在线观看| 国产精品一区二区精品视频观看 | 国产成人黄色| 国产人成精品一区二区三| 久久午夜影视| 蜜臀91精品一区二区三区| 亚洲高清激情| 五月精品视频| 中文另类视频| 日韩免费福利视频| 美腿丝袜亚洲三区| 国产精品成人国产| 青青伊人久久| 国产精品久久久久久久久久白浆 | 亚洲视频电影在线| 在线观看亚洲精品福利片| 精品欧美激情在线观看| 欧美/亚洲一区| 999久久久免费精品国产| 少妇久久久久| 国产成人精品亚洲日本在线观看| caoporn视频在线| 久久精品福利| 国产日韩一区| 国产福利亚洲| 国产精品jk白丝蜜臀av小说| 国产精品日本一区二区不卡视频| 最新国产精品久久久| 欧美一区精品| 国产三级一区| 成人一区而且| 亚洲国产福利| 精品一区在线| 美女网站一区| 亚洲资源网站| 亚洲精品乱码久久久久久蜜桃麻豆| 啪啪亚洲精品| 国产精品xxx| 久久精品电影| 欧美精品羞羞答答| sm捆绑调教国产免费网站在线观看| 久久免费影院| 国产乱人伦丫前精品视频| 精品精品国产三级a∨在线| 免费看一区二区三区| 久久精品主播| 欧美va天堂| 青青草国产成人99久久| 欧美激情一区| 日韩一区二区在线免费| 久久久久久久久丰满| 亚洲一区二区三区中文字幕在线观看| 亚洲欧美日韩精品一区二区| 国产欧美三级| 黄色网一区二区| 91精品91| 蜜臀91精品一区二区三区| 麻豆91在线播放| www在线观看黄色| 在线亚洲激情| 欧美在线黄色| 欧美片第1页综合| 精品视频网站| 你懂的国产精品| 91精品国产调教在线观看| 久久婷婷一区| 国产精品中文字幕亚洲欧美| 国产精品13p| 日韩中文字幕无砖| 日韩不卡一二三区| 激情综合亚洲| 日韩精品一区第一页| 国产成人精选| 亚洲激情av| 久久天堂影院| 99热精品在线| 欧美国产偷国产精品三区| 天堂网在线观看国产精品| 久久精品网址| 欧美精品一区二区久久| 国产精品久久久久久久久久久久久久久| 高清久久精品| 日韩精品一区二区三区中文在线| 精品国产中文字幕第一页| 国内精品99| 欧美日韩精品一区二区三区视频| 国产精品久久久一区二区| 成人羞羞视频播放网站| 日韩精品一区二区三区中文| 国产高清不卡| 88xx成人免费观看视频库| 亚洲日本免费电影| 精品视频国产| 日韩黄色在线观看| 亚洲啊v在线| 国产乱码精品一区二区三区亚洲人| 99成人超碰| 麻豆mv在线观看| 亚洲色图国产| 一本一道久久a久久精品蜜桃| 国产精品宾馆| 亚洲乱亚洲高清| 国产一区丝袜| 麻豆精品一区二区综合av| 免费在线观看精品| 日韩一区二区中文| 日韩一区二区三区在线看| 色老板在线视频一区二区| 黄色在线网站噜噜噜| 91精品国产自产精品男人的天堂| 亚洲精品看片| 亚洲黄色中文字幕| 精品免费视频| 国产美女亚洲精品7777| 欧美日韩视频一区二区三区|