Android EditText實現(xiàn)扁平化的登錄界面
先來看看登錄界面寫完的效果圖

2 監(jiān)聽editText,可以一鍵清空

3 checkBox的顏色統(tǒng)一

代碼
下面,說說如何實現(xiàn)這個界面的,我將代碼全部貼出來。
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_login" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/logoScreenBackground"> <de.hdodenhof.circleimageview.CircleImageView android:id="@+id/iv_icon" android:layout_width="90dp" android:layout_height="90dp" android:layout_centerHorizontal="true" android:layout_marginTop="60dp" android:scaleType="centerCrop" android:src="@mipmap/ic_logo" /> <TextView android:id="@+id/tv_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_marginTop="160dp" android:text="AlphaGo" android:textColor="#000" android:textSize="23sp" android:typeface="monospace" /> <RelativeLayout android:id="@+id/rl_userName" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/tv_title" android:layout_marginTop="40dp" android:background="@drawable/rectangle_edittext"> <ImageView android:id="@+id/iv_userIconName" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:paddingBottom="15dp" android:paddingLeft="30dp" android:paddingTop="15dp" android:src="@mipmap/ic_edittextuname" /> <View android:id="@+id/viewName" android:layout_width="1dip" android:layout_height="20dp" android:layout_centerVertical="true" android:layout_marginLeft="10dp" android:layout_toRightOf="@id/iv_userIconName" android:background="@color/colorCursor" /> <EditText android:id="@+id/et_userName" android:layout_width="match_parent" android:layout_height="30dp" android:layout_centerVertical="true" android:layout_marginLeft="10dp" android:layout_toRightOf="@id/viewName" android:background="@null" android:ems="19" android:hint=" 用戶名" android:textColorHint="@color/colorCursor" android:textCursorDrawable="@drawable/color_cursor" android:textSize="15sp" /> <ImageView android:id="@+id/iv_unameClear" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:layout_marginRight="20dp" android:src="@mipmap/ic_backspace_grey600_24dp" android:visibility="invisible" /> </RelativeLayout> <RelativeLayout android:id="@+id/rl_userPassword" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/rl_userName" android:layout_marginTop="1dp" android:background="@drawable/rectangle_edittext"> <ImageView android:id="@+id/iv_userIconPwd" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:paddingBottom="15dp" android:paddingLeft="30dp" android:paddingTop="15dp" android:src="@mipmap/ic_edittextupwd" /> <View android:id="@+id/viewPwd" android:layout_width="1dip" android:layout_height="20dp" android:layout_centerVertical="true" android:layout_marginLeft="10dp" android:layout_toRightOf="@id/iv_userIconPwd" android:background="@color/colorCursor" /> <EditText android:id="@+id/et_password" android:layout_width="match_parent" android:layout_height="30dp" android:layout_centerVertical="true" android:layout_marginLeft="10dp" android:layout_toRightOf="@id/viewPwd" android:background="@null" android:drawablePadding="5dp" android:ems="19" android:hint=" 密碼" android:inputType="textPassword" android:textColorHint="@color/colorCursor" android:textCursorDrawable="@drawable/color_cursor" android:textSize="15sp" /> <ImageView android:id="@+id/iv_pwdClear" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:layout_marginRight="20dp" android:src="@mipmap/ic_backspace_grey600_24dp" android:visibility="invisible" /> </RelativeLayout> <CheckBox android:id="@+id/cb_checkbox" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/rl_userPassword" android:layout_centerHorizontal="true" android:layout_marginTop="20dp" android:background="@null" android:checked="false" android:duplicateParentState="false" android:text="記住密碼" android:textColor="#666666" android:textSize="15sp" app:buttonTint="@color/colorLoginButton" /> <Button android:id="@+id/btn_login" android:layout_width="340dp" android:layout_height="wrap_content" android:layout_below="@id/cb_checkbox" android:layout_centerHorizontal="true" android:layout_marginTop="20dp" android:background="@drawable/round_corner_bg" android:gravity="center" android:padding="10dp" android:text="登錄" android:textColor="#fff" android:textSize="18sp" /> </RelativeLayout>
幾個重點的問題
從圖中可以看出整個布局是從上到下的分布,那我們就按這樣的順訊來分析
1.如何一張圖片圓形化的展示出來
2.整體輸入框的布局(輸入框中豎線的實現(xiàn))
3.監(jiān)聽edittext是否有輸入
4.將checkbox的顏色與界面統(tǒng)一
1.如何將一張圖片圓形化的展示出來
我是用的是一個開源的項目CircleImageView,它可以用來輕松的實現(xiàn)圖片的圓形化
首先在build.gradle中添加依賴compile 'de.hdodenhof:circleimageview:2.1.0'
在xml布局中用<de.hdodenhof.circleimageview.CircleImageView>來代替ImageView
<de.hdodenhof.circleimageview.CircleImageView android:id="@+id/iv_icon" android:layout_width="90dp" android:layout_height="90dp" android:layout_centerHorizontal="true" android:layout_marginTop="60dp" android:scaleType="centerCrop" android:src="@mipmap/ic_logo" />
2.整體輸入框的布局(輸入框中豎線的實現(xiàn))
整個輸入框就是常規(guī)的ImageView加上textView實現(xiàn)的,分隔圖片和提示文字的豎線,需要我們用view自己去寫。
<View android:id="@+id/viewPwd" android:layout_width="1dip" android:layout_height="20dp" android:layout_centerVertical="true" android:layout_marginLeft="10dp" android:layout_toRightOf="@id/iv_userIconPwd" android:background="@color/colorCursor" />
這樣一條豎線就寫好了,距離大小根據(jù)你的輸入框去調(diào)就好。
在寫editText的時候要想十分的簡潔,需要將背景設(shè)置為"@null",自己去寫一個"shape"
<shape xmlns:android="http://schemas.android.com/apk/res/android"> <size android:width="1dp"/> <solid android:color="@color/colorCursor"/> </shape>
"colorCursor"是自己界面的風(fēng)格
3.監(jiān)聽EditText是否有輸入
我先將代碼貼出來
public class EditTextClearTools { public static void addClearListener(final EditText et , final ImageView iv){ et.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { } @Override public void afterTextChanged(Editable s) { //如果有輸入內(nèi)容長度大于0那么顯示clear按鈕 String str = s + "" ; if (s.length() > 0){ iv.setVisibility(View.VISIBLE); }else{ iv.setVisibility(View.INVISIBLE); } } }); iv.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { et.setText(""); } }); } }
首先大家可以從布局中看出刪除按鈕默認(rèn)是隱藏的android:visibility="invisible"
然后監(jiān)聽EditText的輸入事件,輸入的內(nèi)容長度如果大于0,就將刪除圖標(biāo)顯示出來,并可以清空輸入。
上面的代碼是一個工具類參考這篇博客--AndroidMsky,這篇博客也寫了一個登錄的界面。
在程序中調(diào)用的代碼:
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_logo_activty); init(); } private void init(){ EditText userName = (EditText) findViewById(R.id.et_userName); EditText password = (EditText) findViewById(R.id.et_password); ImageView unameClear = (ImageView) findViewById(R.id.iv_unameClear); ImageView pwdClear = (ImageView) findViewById(R.id.iv_pwdClear); EditTextClearTools.addClearListener(userName,unameClear); EditTextClearTools.addClearListener(password,pwdClear); }
以上就是個登錄界面的整體實現(xiàn),這里只是一個Demo級的例子,大家有更好的實現(xiàn)方法,可以多多交流,如有錯誤請您不吝賜教。
還有如果你看到這里了,很感謝你,讀完我的文章,Android的路上又多了一個可以一起探討和交流的伙伴。
項目地址:https://github.com/DongXUU/LoginDemo,大家可以下載完整的項目
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Android取消EditText自動獲取焦點默認(rèn)行為
- Android控件系列之EditText使用方法
- android同時控制EditText輸入字符個數(shù)和禁止特殊字符輸入的方法
- Android中EditText實現(xiàn)不可編輯解決辦法
- Android定制自己的EditText輕松改變底線顏色
- Android中EditText顯示明文與密碼的兩種方式
- Android自定義EditText實現(xiàn)淘寶登錄功能
- Android高級xml布局之輸入框EditText設(shè)計
- Android自定義EditText實現(xiàn)登錄界面
- Android自定義控件EditText實現(xiàn)清除和抖動功能
相關(guān)文章
Android編程實現(xiàn)AlertDialog自定義彈出對話框的方法示例
這篇文章主要介紹了Android編程實現(xiàn)AlertDialog自定義彈出對話框的方法,結(jié)合實例形式分析了Android AlertDialog自定義彈出對話框的基本功能與事件監(jiān)聽實現(xiàn)技巧,需要的朋友可以參考下2017-07-07完全解析Android多線程中線程池ThreadPool的原理和使用
本篇文章給大家通過原理和實例詳細講述了Android多線程中線程池ThreadPool的原理和使用,對此有興趣的朋友可以跟著參考學(xué)習(xí)下。2018-04-04Android自定義View實現(xiàn)價格區(qū)間選擇控件
這篇文章主要為大家詳細介紹了Android如何利用自定義View實現(xiàn)價格區(qū)間選擇控件,文中的示例代碼講解詳細,感興趣的小伙伴可以嘗試一下2022-11-11EditText限制輸入數(shù)字,精確到小數(shù)點后1位的設(shè)置方法
下面小編就為大家?guī)硪黄狤ditText限制輸入數(shù)字,精確到小數(shù)點后1位的設(shè)置方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-04-04Android使用SqLite實現(xiàn)登錄注冊功能流程詳解
這篇文章主要介紹了使用Android Studio自帶的sqlite數(shù)據(jù)庫實現(xiàn)一個簡單的登錄注冊功能,SQLite是一個軟件庫,實現(xiàn)了自給自足的、無服務(wù)器的、零配置的、事務(wù)性的SQL數(shù)據(jù)庫引擎,本文給大家介紹的非常詳細,需要的朋友可以參考下2023-12-12