Android 第四天

EditText文本輸入框

基本屬性

<EditText
        android:id="@+id/et_password"
        android:layout_width="match_parent"
        android:layout_height="60dp"
        android:background="@drawable/bg"                    // 背景
        android:layout_marginStart="50dp"                
        android:layout_marginEnd="50dp"                      // 外間距
        android:paddingLeft="50dp"                           // 內(nèi)間距


        android:textColor="#ffffff"                          // 字體顏色
        android:textSize="30sp"
        android:hint="請(qǐng)輸入密碼"                             // 默認(rèn)提示文本
        android:textColorHint="#999999"
        android:maxLines="1"
        android:inputType="textPassword"                     // 鍵盤(pán)內(nèi)向和固定行數(shù)

        android:cursorVisible="false"                        // 光標(biāo)是否可見(jiàn)

        android:imeOptions="actionGo"                       // 按鍵鍵盤(pán)的類(lèi)型
        />

監(jiān)聽(tīng)鍵盤(pán)事件的集中方式
// 1. 當(dāng)前這個(gè)Activity來(lái)監(jiān)聽(tīng)事件
et.setOnEditorActionListener(this);

// 實(shí)現(xiàn)接口
public class MainActivity extends AppCompatActivity implements TextView.OnEditorActionListener {                 
  // 鍵盤(pán)被按下的回調(diào)事件
    @Override
    public boolean onEditorAction(TextView textView, int i, KeyEvent keyEvent) {
        System.out.println("點(diǎn)擊了");
        return false;
    }
}

// 2.創(chuàng)建一個(gè)類(lèi) 管理事件的回調(diào)

class aaListener implements TextView.OnEditorActionListener{

    @Override
    public boolean onEditorAction(TextView textView, int i, KeyEvent keyEvent) {
        System.out.println("點(diǎn)擊了");
        return false;
    }
}
// 創(chuàng)建對(duì)象
 aaListener pl = new aaListener();
        et.setOnEditorActionListener(pl);
        // 匿名對(duì)象
        et.setOnEditorActionListener(new aaListener());

// 3.創(chuàng)建匿名類(lèi)對(duì)象

        et.setOnEditorActionListener(new TextView.OnEditorActionListener() {
            @Override
            public boolean onEditorAction(TextView textView, int i, KeyEvent keyEvent) {
                et.getText();
                return false;
            }
        });

// 4.Lambda表達(dá)式

        et.setOnEditorActionListener((TextView textView, int i, KeyEvent keyEvent) ->{
                    System.out.println("點(diǎn)擊了");
                    return true;
                }
              );

// 監(jiān)聽(tīng)EditText文本內(nèi)容改變的事件

        et.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

            }

            @Override
            public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {

                // 獲取目前輸入的個(gè)數(shù)
                int len = charSequence.toString().length();
                if (len > 6){
                    // 將最后一個(gè)刪除掉
                    // 只要前面6個(gè)
                    et.setText(charSequence.subSequence(0,6));

                    // 讓光標(biāo)定位到最后
                    et.setSelection(6);
                }
            }

            @Override
            public void afterTextChanged(Editable editable) {

            }
        });
    }

PIN解鎖demo

  • xml搭建界面
<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:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <ImageView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@drawable/main"/>

    <TextView
        android:id="@+id/tv_alert"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="請(qǐng)?jiān)O(shè)置密碼"
        android:textColor="@color/colorGray"
        android:textSize="@dimen/dimen_alert"
        android:textAlignment="center"
        android:layout_marginTop="80dp"/>

    <EditText
        android:id="@+id/et_password"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/normal"
        android:layout_centerHorizontal="true"
        android:layout_below="@+id/tv_alert"
        android:layout_marginTop="30dp"
        android:paddingLeft="50dp"

        android:textColor="@color/colorGray"
        android:textSize="@dimen/dimen_textView"
        android:textColorHint="#999999"
        android:maxLines="1"
        android:inputType="textPassword"
        android:maxLength="6"
        android:cursorVisible="false"
        android:letterSpacing="0.6"
        />
</RelativeLayout>
  • 設(shè)置鍵盤(pán)一直顯示
    QQ圖片20190907221303.png
  • 密碼解鎖代碼


import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.content.SharedPreferences;
import android.content.res.Resources;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.MotionEvent;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {
private TextView mTextView;
private EditText mEditText;
private String password;
private String firstInput;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

//獲取xml的控件
        mTextView = findViewById(R.id.tv_alert);
        mEditText = findViewById(R.id.et_password);

        //獲取保存的密碼
        //獲取管理資源對(duì)象Resources
        Resources res = getResources();
        //通過(guò)這個(gè)對(duì)象獲取string.xml里面對(duì)應(yīng)的字符串
        String fileName = res.getString(R.string.password_file_name);
        //獲取共享的sp對(duì)象:1.文件不存在就創(chuàng)建 2.文件存在就打開(kāi)
        final SharedPreferences sp = getSharedPreferences(fileName, MODE_PRIVATE);
        //通過(guò)key獲取對(duì)應(yīng)的value
        password = sp.getString("yx",null);

        //顯示提示文本
        if (password == null){
            mTextView.setText("請(qǐng)?jiān)O(shè)置密碼");
        }else{
            mTextView.setText("請(qǐng)輸入密碼");
        }

        //監(jiān)聽(tīng)內(nèi)容改變的事件
        mEditText.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)容
                String inputPassword = s.toString();

                //判斷是不是6個(gè)
                if (inputPassword.length() == 6){
                    //判斷是不是設(shè)置密碼
                    if (password == null){
                        //設(shè)置密碼
                        if (firstInput == null){
                            //設(shè)置密碼的第一次輸入
                            firstInput = inputPassword;

                            //提示確認(rèn)密碼
                            mTextView.setText("請(qǐng)確認(rèn)密碼");

                            //清空內(nèi)容
                            mEditText.setText("");
                        }else{
                            //確認(rèn)密碼
                            if (firstInput.equals(inputPassword)){
                                //兩次密碼一致
                                mTextView.setText("設(shè)置密碼成功中姜!");

                                goToNext();
                                //保存密碼
                                SharedPreferences.Editor edit = sp.edit();
                                edit.putString("yx",firstInput);
                                edit.commit();
                            }else{
                                //密碼不正確
                                mTextView.setText("兩次密碼不一致 請(qǐng)重新設(shè)置");
                                firstInput = null;
                                mEditText.setText("");
                            }
                        }
                    } else{
                        //密碼設(shè)置過(guò)了
                        if(inputPassword.equals(password)){
                            //密碼正確
                            mTextView.setText("密碼正確!");
                            goToNext();
                        }else{
                            //不正確
                            mTextView.setText("密碼錯(cuò)誤請(qǐng)重新輸入");
                            //清空
                            mEditText.setText("");
                        }
                    }
                }
            }
        });
    }
  • 實(shí)現(xiàn)界面跳轉(zhuǎn)

    1.先創(chuàng)建一個(gè)界面
    QQ圖片20190907221652.png

    2.代碼實(shí)現(xiàn)跳轉(zhuǎn)
    QQ圖片20190907221727.png

    3.點(diǎn)擊屏幕實(shí)現(xiàn)返回
    QQ圖片20190907221810.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市骂因,隨后出現(xiàn)的幾起案子灼卢,更是在濱河造成了極大的恐慌绍哎,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,248評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鞋真,死亡現(xiàn)場(chǎng)離奇詭異崇堰,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)涩咖,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門(mén)海诲,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人抠藕,你說(shuō)我怎么就攤上這事饿肺。” “怎么了盾似?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,443評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵敬辣,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我零院,道長(zhǎng)溉跃,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,475評(píng)論 1 279
  • 正文 為了忘掉前任告抄,我火速辦了婚禮撰茎,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘打洼。我一直安慰自己龄糊,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,458評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布募疮。 她就那樣靜靜地躺著炫惩,像睡著了一般。 火紅的嫁衣襯著肌膚如雪阿浓。 梳的紋絲不亂的頭發(fā)上他嚷,一...
    開(kāi)封第一講書(shū)人閱讀 49,185評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音芭毙,去河邊找鬼筋蓖。 笑死,一個(gè)胖子當(dāng)著我的面吹牛退敦,可吹牛的內(nèi)容都是我干的粘咖。 我是一名探鬼主播,決...
    沈念sama閱讀 38,451評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼侈百,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼瓮下!你這毒婦竟也來(lái)了忠聚?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,112評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤唱捣,失蹤者是張志新(化名)和其女友劉穎两蟀,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體震缭,經(jīng)...
    沈念sama閱讀 43,609評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡赂毯,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,083評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了拣宰。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片党涕。...
    茶點(diǎn)故事閱讀 38,163評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖巡社,靈堂內(nèi)的尸體忽然破棺而出膛堤,到底是詐尸還是另有隱情,我是刑警寧澤晌该,帶...
    沈念sama閱讀 33,803評(píng)論 4 323
  • 正文 年R本政府宣布肥荔,位于F島的核電站,受9級(jí)特大地震影響朝群,放射性物質(zhì)發(fā)生泄漏燕耿。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,357評(píng)論 3 307
  • 文/蒙蒙 一姜胖、第九天 我趴在偏房一處隱蔽的房頂上張望誉帅。 院中可真熱鬧,春花似錦右莱、人聲如沸蚜锨。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,357評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)亚再。三九已至,卻和暖如春胀瞪,著一層夾襖步出監(jiān)牢的瞬間针余,已是汗流浹背饲鄙。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,590評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工凄诞, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人忍级。 一個(gè)月前我還...
    沈念sama閱讀 45,636評(píng)論 2 355
  • 正文 我出身青樓帆谍,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親轴咱。 傳聞我的和親對(duì)象是個(gè)殘疾皇子汛蝙,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,925評(píng)論 2 344

推薦閱讀更多精彩內(nèi)容

  • ¥開(kāi)啟¥ 【iAPP實(shí)現(xiàn)進(jìn)入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開(kāi)一個(gè)線(xiàn)程烈涮,因...
    小菜c閱讀 6,358評(píng)論 0 17
  • 生命周期 android是使用任務(wù)(Task)來(lái)管理活動(dòng)的,一個(gè)任務(wù)就是一組存放在棧里的活動(dòng)集合窖剑,這個(gè)棧也被稱(chēng)為...
    GoldenR閱讀 241評(píng)論 0 1
  • 今天學(xué)習(xí)Android遇到問(wèn)題點(diǎn): 1.Android 相關(guān)目錄中不能出現(xiàn)空格坚洽,否則會(huì)報(bào)以下錯(cuò)誤: project...
    yezi1989閱讀 899評(píng)論 0 0
  • String實(shí)現(xiàn)了5個(gè)接口,Serializable和Comparable比較好理解西土,后面三個(gè)比較難理解 Char...
    liubin10閱讀 418評(píng)論 0 0
  • 碌碡劇場(chǎng) 題記: 初秋陪愛(ài)人去渭源企業(yè)家張鵬舉先生為家鄉(xiāng)創(chuàng)建的農(nóng)耕文化博物館---碌碡劇場(chǎng)觀看渭源籍秦腔表演藝術(shù)家...
    大彎山遺民閱讀 393評(píng)論 0 4