仿知乎登陸郵箱自動補全,郵箱補全

來源:互聯網
上載者:User

仿知乎登陸郵箱自動補全,郵箱補全

項目要求:

登陸介面輸入郵箱,自動匹配常用郵箱並自動補全尾碼。

比如郵箱為10376129@qq.com,當我輸入10376129@q時,輸入框自動補全後面的q.com且顏色為灰淺色,輸入框失去焦點時,補全q.com顏色變為黑色,和前面103796129@q的顏色一致。


解決:

1.通過查看知乎的布局,發現沒有用自訂控制項,僅僅用了普通的EditText。


2.查看EditTex(繼承TextView)t的API,最終想到了用下面這個方法

   void android.widget.TextView.setCompoundDrawables(Drawable left,Drawable top, Drawable right,Drawable bottom)

   通過繪製EditText右邊的Drawable來顯示需要自動補全的字串


3.示範

  




4.關鍵代碼

package com.lt.autoemailactivity;import java.util.HashMap;import java.util.Iterator;import java.util.Map;import android.app.Activity;import android.graphics.Bitmap;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.Rect;import android.graphics.drawable.BitmapDrawable;import android.graphics.drawable.Drawable;import android.os.Bundle;import android.text.Editable;import android.text.TextWatcher;import android.view.View;import android.view.View.OnFocusChangeListener;import android.widget.EditText;public class AutoCompleteEditTextActivity extends Activity implementsTextWatcher {/** * 郵箱EditText */private EditText mEmailEditText;/** * 常用的郵箱 */private HashMap<String, String> mAutoData = new HashMap<String, String>();/** * 郵箱editText的高度 */private int mHeight;/** * 郵箱editText的寬度 */private int mWidth;/** * 輸入框中字元的baseLine */private int baseLine;/** * 畫筆 */private Paint mPaint;private Bitmap mBitmap;/** * 畫布 */private Canvas canvas;private Drawable drawable;/** * 尾碼字串 */private String mAddedText = "";/** * 記錄是否為空白 */private boolean mFlag;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_auto_complete_edittext);initEmail();mEmailEditText = (EditText) findViewById(R.id.email);mEmailEditText.addTextChangedListener(this);mEmailEditText.setOnFocusChangeListener(new OnFocusChangeListener() {@Overridepublic void onFocusChange(View v, boolean hasFocus) {if (!hasFocus) {mEmailEditText.append(mAddedText);}}});}@Overridepublic void beforeTextChanged(CharSequence s, int start, int count,int after) {}@Overridepublic void onTextChanged(CharSequence s, int start, int before, int count) {}@Overridepublic void afterTextChanged(Editable s) {String text = s.toString();mFlag = true;Iterator<Map.Entry<String, String>> iterator = mAutoData.entrySet().iterator();// 遍曆常用郵箱while (iterator.hasNext()) {Map.Entry<String, String> entry = iterator.next();if (text.endsWith(entry.getKey())) {drawAddedText(entry.getValue());mAddedText = entry.getValue();mFlag = false;break;}}// 如果沒有匹配,就畫一個空if (mFlag) {drawAddedText("");mAddedText = "";}}/** * 畫出尾碼字串 *  * @param addedText */private void drawAddedText(String addedText) {// 如果字串為空白,畫空if (addedText.equals("")) {mEmailEditText.setCompoundDrawables(null, null, null, null);return;}// 只需要初始化一次if (mBitmap == null) {mHeight = mEmailEditText.getHeight();mWidth = mEmailEditText.getWidth();// 初始化畫筆mPaint = new Paint();mPaint.setColor(Color.GRAY);mPaint.setAntiAlias(true);// 去除鋸齒mPaint.setFilterBitmap(true);// 對位元影像進行濾波處理mPaint.setTextSize(mEmailEditText.getTextSize());}// 計算baseLineRect rect = new Rect();int baseLineLocation = mEmailEditText.getLineBounds(0, rect);baseLine = baseLineLocation - rect.top;// 添加的字元竄的長度int addedTextWidth = (int) (mPaint.measureText(addedText) + 1);// 建立bitmapmBitmap = Bitmap.createBitmap(addedTextWidth, mHeight,Bitmap.Config.ARGB_8888);canvas = new Canvas(mBitmap);// 繪製尾碼字串canvas.drawText(addedText, 0, baseLine, mPaint);// bitmap轉化為Drawabledrawable = new BitmapDrawable(mBitmap);String text = mEmailEditText.getText().toString();// 計算尾碼字串在輸入框中的位置int addedTextLeft = (int) (mPaint.measureText(text) - mWidth + addedTextWidth);int addedTextRight = addedTextLeft + addedTextWidth;int addedTextTop = 0;int addedTextBottom = addedTextTop + mHeight;// 設定尾碼字串位置drawable.setBounds(addedTextLeft, addedTextTop, addedTextRight,addedTextBottom);// 顯示尾碼字串mEmailEditText.setCompoundDrawables(null, null, drawable, null);}/** * 初始化常用的郵箱 */private void initEmail() {mAutoData.put("@q", "q.com");mAutoData.put("@qq", ".com");mAutoData.put("@qq.", "com");mAutoData.put("@qq.c", "om");mAutoData.put("@qq.co", "m");mAutoData.put("@1", "63.com");mAutoData.put("@16", "3.com");mAutoData.put("@163", ".com");mAutoData.put("@163.", "com");mAutoData.put("@163.c", "om");mAutoData.put("@163.co", "m");mAutoData.put("@s", "ina.cn");mAutoData.put("@si", "na.cn");mAutoData.put("@sin", "a.cn");mAutoData.put("@sina", ".cn");mAutoData.put("@sina.", "cn");mAutoData.put("@sina.c", "n");mAutoData.put("@s", "ina.com");mAutoData.put("@si", "na.com");mAutoData.put("@sin", "a.com");mAutoData.put("@sina", ".com");mAutoData.put("@sina.", "com");mAutoData.put("@sina.c", "om");mAutoData.put("@sina.co", "m");mAutoData.put("@1", "26.com");mAutoData.put("@12", "6.com");mAutoData.put("@126", ".com");mAutoData.put("@126.", "com");mAutoData.put("@126.c", "om");mAutoData.put("@126.co", "m");}}



5.源碼下載(有注釋)

http://download.csdn.net/detail/a15501628162/8412245






聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.