Android QQ登錄界面繪制代碼
本文實(shí)例為大家分享了Android QQ登錄界面繪制的具體代碼,供大家參考,具體內(nèi)容如下
先看看效果圖:
首先過程中碰到的幾個(gè)問題:
1、對(duì) EditText 進(jìn)行自定義背景
2、運(yùn)行時(shí)自動(dòng) EditText 自動(dòng)獲得焦點(diǎn)
3、在獲得焦點(diǎn)時(shí)即清空 hint ,而不是輸入后清空
4、清空按鈕的出現(xiàn)時(shí)機(jī)(在得到焦點(diǎn)并且有輸入內(nèi)容時(shí))
--- 這些問題都有一一解決 ---
以下是代碼:
布局 fragment_main(問題2)
<!-- android:focusable="true" android:focusableInTouchMode="true" 把EditText默認(rèn)的行為截?cái)嗔耍?--> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#ECEDF1" android:focusable="true" android:focusableInTouchMode="true" tools:context="com.dragon.android.qqlogin.MainActivity$PlaceholderFragment" > <ImageView android:id="@+id/imageView1" android:layout_width="70dp" android:layout_height="70dp" android:layout_centerHorizontal="true" android:layout_marginBottom="5dp" android:layout_marginTop="40dp" android:src="@drawable/a" /> <EditText android:id="@+id/editText1" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@id/imageView1" android:ems="10" android:background="@drawable/bg_edittext" android:inputType="textPersonName" android:gravity="center" android:textColor="#6A6A6C" android:hint="@string/inaccount" android:textColorHint="#ECEDDD"> </EditText> <EditText android:id="@+id/editText2" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@id/editText1" android:ems="10" android:background="@drawable/bg_edittext" android:inputType="textPassword" android:gravity="center" android:textColor="#6A6A6C" android:hint="@string/inpwd" android:textColorHint="#ECEDDD" > </EditText> <Button android:id="@+id/button1" android:layout_width="match_parent" android:layout_height="40dp" android:layout_below="@id/editText2" android:layout_marginLeft="20dp" android:layout_marginRight="20dp" android:layout_marginTop="10dp" android:background="@drawable/bg_button" android:text="@string/button" android:gravity="center" android:textColor="#F9FAFB" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:padding="10dp" > <TextView android:id="@+id/textView2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center" android:text="@string/faillogin" android:textColor="#0EB1EF" /> <TextView android:id="@+id/textView3" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="right" android:text="@string/regist" android:textColor="#0EB1EF" /> </LinearLayout> <Button android:id="@+id/button2" android:layout_width="16dp" android:layout_height="16dp" android:layout_alignTop="@id/editText1" android:layout_marginTop="15dp" android:layout_alignParentRight="true" android:layout_marginRight="10dp" android:background="@drawable/clear" android:visibility="invisible" /> <Button android:id="@+id/button3" android:layout_width="16dp" android:layout_height="16dp" android:layout_alignTop="@id/editText2" android:layout_marginTop="15dp" android:layout_alignLeft="@+id/button2" android:background="@drawable/clear" android:visibility="invisible" /> </RelativeLayout>
Button 和 EditText 的背景(問題1)
1.bg_button
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" > <stroke android:width="1px" android:color="#00ACED" /> <solid android:color="#00ACED" /> <corners android:radius="10dp" /> </shape>
2.bg_edittext
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" > <stroke android:width="1px" android:color="#ECEDF1" /> <solid android:color="#F9FAFB" /> <corners android:radius="10dp" /> <padding android:top="10dp" android:bottom="10dp"/> </shape>
3.strings
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name">qqloginnew</string> <string name="action_settings">Settings</string> <string name="button">登錄</string> <string name="faillogin">無法登錄?</string> <string name="regist">新用戶注冊(cè)</string> <string name="inaccount">QQ號(hào)/手機(jī)號(hào)/郵箱</string> <string name="inpwd">密碼</string> <string name="sucess">登錄成功</string> </resources>
MainActivity (問題3、4.....)
package com.dragon.android.qqloginnew; import android.app.Activity; import android.os.Bundle; import android.text.Editable; import android.text.TextWatcher; import android.view.View; import android.view.View.OnClickListener; import android.view.View.OnFocusChangeListener; import android.widget.Button; import android.widget.EditText; public class MainActivity extends Activity { private EditText editText1; private EditText editText2; // private Button button; private Button clearButton1; private Button clearButton2; // 得到strings中的屬性 // private String string2 = getResources().getString(R.string.inaccount); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.fragment_main); editText1 = (EditText) findViewById(R.id.editText1); editText2 = (EditText) findViewById(R.id.editText2); // button = (Button) findViewById(R.id.button1); clearButton1 = (Button) findViewById(R.id.button2); clearButton2 = (Button) findViewById(R.id.button3); // 對(duì)EditText進(jìn)行焦點(diǎn)變更監(jiān)聽 editText1.setOnFocusChangeListener(new EditTextListener(clearButton1)); editText2.setOnFocusChangeListener(new EditTextListener(clearButton2)); // 對(duì)清空按鈕進(jìn)行點(diǎn)擊監(jiān)聽 clearButton1.setOnClickListener(new ClearButtonListener()); clearButton2.setOnClickListener(new ClearButtonListener()); // 對(duì)EditText進(jìn)行編輯監(jiān)聽 editText1.addTextChangedListener(new MyEditTextWatcher(editText1)); editText2.addTextChangedListener(new MyEditTextWatcher(editText2)); } /** * 對(duì)EditText的內(nèi)容進(jìn)行實(shí)時(shí)監(jiān)控 * * @author Auser * */ class MyEditTextWatcher implements TextWatcher { private CharSequence temp; private EditText editText; public MyEditTextWatcher(EditText editText) { this.editText = editText; } @Override // int start開始的位置, int count被改變的舊內(nèi)容數(shù), int after改變后的內(nèi)容數(shù)量 public void beforeTextChanged(CharSequence s, int start, int count, int after) { // 這里的s表示改變之前的內(nèi)容,通常start和count組合,可以在s中讀取本次改變字段中被改變的內(nèi)容。而after表示改變后新的內(nèi)容的數(shù)量。 } @Override // int start開始的位置, int before改變前的內(nèi)容數(shù)量, int count新增量 public void onTextChanged(CharSequence s, int start, int before, int count) { // 這里的s表示改變之后的內(nèi)容,通常start和count組合,可以在s中讀取本次改變字段中新的內(nèi)容。而before表示被改變的內(nèi)容的數(shù)量。 temp = s; } @Override // 表示最終內(nèi)容 public void afterTextChanged(Editable s) { if (temp.length() > 0) { // 設(shè)置清空按鈕為可見 if (editText == editText1) { clearButton1.setVisibility(View.VISIBLE); } else if (editText == editText2) { clearButton2.setVisibility(View.VISIBLE); } } else { // 設(shè)置清空按鈕不可見 if (editText == editText1) { clearButton1.setVisibility(View.INVISIBLE); } else if (editText == editText2) { clearButton2.setVisibility(View.INVISIBLE); } } } } /** * 清空按鈕點(diǎn)擊事件 * * @author * */ class ClearButtonListener implements OnClickListener { @Override public void onClick(View view) { if (view == clearButton1) { editText1.setText(""); } else if (view == clearButton2) { editText2.setText(""); } } } /** * 焦點(diǎn)變更事件 * * @author Auser * */ class EditTextListener implements OnFocusChangeListener { private Button clear; public EditTextListener(Button clear) { this.clear = clear; } @Override public void onFocusChange(View v, boolean hasFocus) { EditText textView = (EditText) v; String hint; if (hasFocus) { // 當(dāng)獲取焦點(diǎn)時(shí)如果內(nèi)容不為空則清空按鈕可見 if (!textView.getText().toString().equals("")) { clear.setVisibility(View.VISIBLE); } // if (textView == editText2) { // // 設(shè)置輸入格式為不可見的密碼格式 // textView.setInputType(InputType.TYPE_CLASS_TEXT // | InputType.TYPE_TEXT_VARIATION_PASSWORD); // } hint = textView.getHint().toString(); // 給TextView添加額外的數(shù)據(jù) textView.setTag(hint); textView.setHint(""); } else { // 當(dāng)失去焦點(diǎn)時(shí)清空按鈕不可見 clear.setVisibility(View.INVISIBLE); // if (textView == editText2) { // // 設(shè)置輸入格式為可見的密碼格式 // textView.setInputType(InputType.TYPE_CLASS_TEXT // | InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD); // } // 取出之前添加的額外數(shù)據(jù) hint = textView.getTag().toString(); textView.setHint(hint); } } } }
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Android Studio實(shí)現(xiàn)簡單的QQ登錄界面的示例代碼
- Android使用友盟集成QQ、微信、微博等第三方分享與登錄方法詳解
- Android仿QQ在狀態(tài)欄顯示登錄狀態(tài)效果
- Android Studio實(shí)現(xiàn)第三方QQ登錄操作代碼
- Android第三方登錄之QQ登錄
- Android實(shí)現(xiàn)QQ登錄功能
- Android第三方登錄之騰訊QQ登錄的實(shí)例代碼
- Android實(shí)現(xiàn)QQ登錄界面遇到問題及解決方法
- Android調(diào)用第三方QQ登錄代碼分享
- Android實(shí)現(xiàn)簡單QQ登錄頁面
相關(guān)文章
Android?Camera+SurfaceView自動(dòng)聚焦防止變形拉伸
這篇文章主要為大家介紹了Android自定義相機(jī)Camera+SurfaceView實(shí)現(xiàn)自動(dòng)聚焦防止變形拉伸詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01Android開發(fā)實(shí)現(xiàn)Switch控件修改樣式功能示例【附源碼下載】
這篇文章主要介紹了Android開發(fā)實(shí)現(xiàn)Switch控件修改樣式功能,涉及Android Switch開關(guān)控件樣式設(shè)置與事件響應(yīng)相關(guān)操作技巧,需要的朋友可以參考下2019-04-04Android Gradle Build Error:Some file crunching failed, see l
這篇文章主要介紹了Android Gradle Build Error:Some file crunching failed, see logs for details的快速解決方法的相關(guān)資料,需要的朋友可以參考下2016-10-10Android SharedPreferences實(shí)現(xiàn)保存登錄數(shù)據(jù)功能
這篇文章主要為大家詳細(xì)介紹了Android SharedPreferences實(shí)現(xiàn)保存登錄數(shù)據(jù)功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-05-05Android 判斷SIM卡屬于哪個(gè)移動(dòng)運(yùn)營商詳解及實(shí)例
這篇文章主要介紹了Android 判斷SIM卡屬于哪個(gè)移動(dòng)運(yùn)營商詳解相關(guān)資料,并附實(shí)例代碼,具有一定參考價(jià)值,需要的朋友可以參考下2016-11-11