Android開發(fā)第四天

EditText?本輸?框——PIN解鎖

目錄

1.輸入框:用于用戶的輸入

  1. EditText基本屬性
  2. 監(jiān)聽事件
    1.創(chuàng)建匿名類對象
    2.當(dāng)前這個Activity來監(jiān)聽
  3. 監(jiān)聽文本內(nèi)容改變

詳解

1.輸入框:用于用戶的輸入

1.TextView 顯示文本
2.PlainText
3.EditText

  1. EditText基本屬性
    EditText繼承TextView文兑,包含它的所有屬性

margin:和服容器的間距
padding:控件內(nèi)間距
textColor:輸入顏色
textSize:顯示尺寸
maxLines:最大行數(shù)
inputType:輸入類型
hint:顯示文本
textColorHint:顯示文本顏色

實現(xiàn):

<?xml version="1.0" encoding="utf-8"?>
<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">
<!--
入框:用于用戶的輸入
1.TextView 顯示文本
2.PlainText
3.EditText
margin:和服容器的間距
padding:控件內(nèi)間距
-->
    <EditText
        android:id="@+id/et_password"
        android:layout_width="match_parent"
        android:layout_height="70dp"
        android:background="@drawable/unlock"

        android:layout_marginLeft="50dp"
        android:layout_marginRight="50dp"
        android:paddingLeft="70dp"

        android:textColor="#ffffff"
        android:textSize="30sp"

        android:hint="請輸入密碼"
        android:textColorHint="#999999"

        android:maxLines="1"
        android:inputType="textPassword"

        android:cursorVisible="false"

        android:imeOptions="actionGo"
        />

</RelativeLayout>

顯示結(jié)果:


PIN
  1. 監(jiān)聽事件
    1.創(chuàng)建匿名類對象

1.1 匿名對象
1.2 匿名類對象
1.3 Lambda表達式

public class MainActivity extends AppCompatActivity implements TextView.OnEditorActionListener  {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //id獲取對應(yīng)文件
        EditText et=findViewById(R.id.et_password);
   //1.1 匿名對象
       /* xjtlistener pl=new xjtlistener();
        et.setOnEditorActionListener (pl);*/
       //1.2 匿名類對象
        et.setOnEditorActionListener (new TextView.OnEditorActionListener() {
            @Override
            public boolean onEditorAction(TextView textView, int i, KeyEvent keyEvent) {
                System.out.println("點擊了");
                return false;
            }
        });
        //1.3 Lambda表達式
        /*et.setOnEditorActionListener((textView,actionId,event)->
        {
            System.out.println("點擊了");
            return true;
        });*/

class xjtlistener implements TextView.OnEditorActionListener {
    @Override
    public boolean onEditorAction(TextView textView, int i, KeyEvent keyEvent) {
        System.out.println("點擊了");
        return false;
    }
}

2.當(dāng)前這個Activity來監(jiān)聽

et.OnEditorActionListener (this);
//鍵盤按下的回調(diào)事件
    @Override
    public boolean onEditorAction(TextView textView, int i, KeyEvent keyEvent) {
        System.out.println("點擊了");
        return false;
    }
  1. 監(jiān)聽文本內(nèi)容改變
et.addTextChangedListener(new TextWatcher() {
            /**
             *
             * @param charSequence 顯示文本內(nèi)容
             * @param i start 光標(biāo)在最后形入,0
             *                 光標(biāo)在中間霜医,光標(biāo)位置數(shù)
             * @param i1 before 改變之前最后一個字符的位置
             * @param i2 count 光標(biāo)在最后旋讹,改變之后字符個數(shù)
             *                  光標(biāo)在中間盯质,改變的個數(shù)
             * s:文本框中輸入的所有文字  start:添加文字的位置 before:一直是0 count:此次添加文字的總個數(shù)
             * s:之前的文字內(nèi)容   start:添加文字的位置   count:一直是0  after:此次添加的文字總數(shù)(并不是輸入框中的文字的總數(shù))
             * 光標(biāo)在最后
             * before<count:添加
             * before>count:刪除
             *
             * 限制輸入的個數(shù)
             *
             */
            @Override
            public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
//                System.out.println("改變前:"+et.getText().toString());
            }

            @Override
            public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
//                System.out.println("正在改變:"+et.getText().toString());

                //獲取目前輸入的個數(shù)
                int len=charSequence.toString().length();
                if (len>6){
                    //將最后一個刪除
                    //只要前6個
                    et.setText(charSequence.subSequence(0,6));
                    //讓光標(biāo)定位到最后
                    et.setSelection(6);
                }
            }

            @Override
            public void afterTextChanged(Editable editable) {
//                System.out.println("改變后:"+et.getText().toString());

            }
        });
    }

Android 文本監(jiān)聽接口TextWatcher詳解

練習(xí)——PIN解鎖

1.設(shè)置密碼
2.輸入正確密碼尚洽,跳轉(zhuǎn)界面
解鎖界面

<?xml version="1.0" encoding="utf-8"?>
<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/bg"
        />

    <!--文本提示框-->
    <TextView
        android:id="@+id/tv_alert"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="請設(shè)置密碼"
        android:textColor="@color/colorGray"
        android:textSize="@dimen/dimen_alert"
        android:textAlignment="center"
        android:layout_marginTop="100dp"
        />

    <!--添加文本輸入框-->
    <EditText
        android:id="@+id/et_password"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/unlock"
        android:layout_centerHorizontal="true"
        android:layout_below="@+id/tv_alert"
        android:layout_marginTop="30dp"
        android:paddingLeft="60dp"
        android:textColor="@color/colorGray"
        android:textSize="@dimen/dimen_textView"
        android:inputType="textPassword"
        android:maxLines="1"
        android:maxLength="6"
        android:cursorVisible="false"

        />

</RelativeLayout>
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);

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

        //顯示提示文本
        if (password==null){
            mTextView.setText("請設(shè)置密碼");
        }else {
            mTextView.setText("請輸入密碼");
        }

        //監(jiān)聽內(nèi)容改變的事件
        //觀察者
        mEditText.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) {

            }

            @Override
            public void afterTextChanged(Editable editable) {
                //獲取文本內(nèi)容
                String inputpassword = editable.toString();

                //判斷是不是6個
                if (inputpassword.length()==6){
                    //判斷是不是設(shè)置密碼
                    if (password == null){
                        //設(shè)置密碼
                        if (firstInput==null){
                            //設(shè)置密碼的第一次輸入
                            firstInput=inputpassword;
                            //提示確認密碼
                            mTextView.setText("請確認密碼");
                            //清空內(nèi)容
                            mEditText.setText("");
                        }else {
                            //確認密碼
                            if (firstInput.equals(inputpassword)){
                                //兩次密碼一致
                                mTextView.setText("設(shè)置密碼成功");
                                //保存密碼
                                SharedPreferences.Editor editor=sp.edit();
                                editor.putString("pwd",firstInput);
                                editor.commit();
                                //跳轉(zhuǎn)
                                gotoNext();
                            }else {
                                //密碼不正確
                                mTextView.setText("兩次密碼不一致請重新設(shè)置");
                                firstInput=null;
                                mEditText.setText("");
                            }
                        }
                    }else {
                        //密碼設(shè)置過了
                        if (inputpassword.equals(password)){
                            //密碼正確
                            mTextView.setText("密碼正確");
                            //跳轉(zhuǎn)
                            gotoNext();
                        }else {
                            //不正確
                            mTextView.setText("密碼錯誤請重新輸入");
                            //清空
                            mEditText.setText("");
                        }
                    }
                }
            }
        });
    }

    /**
     * 跳轉(zhuǎn)到下一個界面
     * 4大組件
     * 1.Activity 界面
     * 2.Service 服務(wù) 后臺做的事情
     * 3.ContentProvider 內(nèi)容提供者 不同程序間數(shù)據(jù)交互
     * 4.BroadcastReceiver 廣播接收者(通知)
     *
     * Intent作為數(shù)據(jù)傳遞樞紐
     * 意圖:跳到那個界面缤底,要不要帶數(shù)據(jù)
     */
    private void gotoNext(){
        //創(chuàng)建一個Intent確定跳轉(zhuǎn)界面
        //1.顯示意圖 2.隱示意圖(系統(tǒng)界面)
        Intent intent = new Intent(this,Main2Activity.class);

        //跳轉(zhuǎn)
        startActivity(intent);
    }
}

跳轉(zhuǎn)界面


新建active
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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=".Main2Activity"
    android:background="@color/colorAccent">

</androidx.constraintlayout.widget.ConstraintLayout>
public class Main2Activity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        //返回上一個界面,刪除當(dāng)前界面,結(jié)束Main2Activity
        finish();
        return true;
    }
}
顯示

下期內(nèi)容
1.Button
形狀 狀態(tài) 事件監(jiān)聽
2.動畫
補間 屬性 關(guān)鍵幀
3.實現(xiàn)捂眼睛demo

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末自娩,一起剝皮案震驚了整個濱河市用踩,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌忙迁,老刑警劉巖脐彩,帶你破解...
    沈念sama閱讀 212,599評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異姊扔,居然都是意外死亡惠奸,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,629評論 3 385
  • 文/潘曉璐 我一進店門恰梢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來佛南,“玉大人梗掰,你說我怎么就攤上這事⌒峄兀” “怎么了及穗?”我有些...
    開封第一講書人閱讀 158,084評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長妈拌。 經(jīng)常有香客問我拥坛,道長,這世上最難降的妖魔是什么尘分? 我笑而不...
    開封第一講書人閱讀 56,708評論 1 284
  • 正文 為了忘掉前任猜惋,我火速辦了婚禮,結(jié)果婚禮上培愁,老公的妹妹穿的比我還像新娘著摔。我一直安慰自己,他們只是感情好定续,可當(dāng)我...
    茶點故事閱讀 65,813評論 6 386
  • 文/花漫 我一把揭開白布谍咆。 她就那樣靜靜地躺著,像睡著了一般私股。 火紅的嫁衣襯著肌膚如雪摹察。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,021評論 1 291
  • 那天倡鲸,我揣著相機與錄音供嚎,去河邊找鬼。 笑死峭状,一個胖子當(dāng)著我的面吹牛克滴,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播优床,決...
    沈念sama閱讀 39,120評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼劝赔,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了胆敞?” 一聲冷哼從身側(cè)響起着帽,我...
    開封第一講書人閱讀 37,866評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎移层,沒想到半個月后仍翰,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,308評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡幽钢,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,633評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了傅是。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片匪燕。...
    茶點故事閱讀 38,768評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡蕾羊,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出帽驯,到底是詐尸還是另有隱情龟再,我是刑警寧澤,帶...
    沈念sama閱讀 34,461評論 4 333
  • 正文 年R本政府宣布尼变,位于F島的核電站利凑,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏嫌术。R本人自食惡果不足惜哀澈,卻給世界環(huán)境...
    茶點故事閱讀 40,094評論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望度气。 院中可真熱鬧割按,春花似錦、人聲如沸磷籍。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,850評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽院领。三九已至弛矛,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間比然,已是汗流浹背丈氓。 一陣腳步聲響...
    開封第一講書人閱讀 32,082評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留谈秫,地道東北人扒寄。 一個月前我還...
    沈念sama閱讀 46,571評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像拟烫,于是被迫代替她去往敵國和親该编。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,666評論 2 350

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

  • ¥開啟¥ 【iAPP實現(xiàn)進入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個線程硕淑,因...
    小菜c閱讀 6,375評論 0 17
  • 引言 EditTex是Android中比較常用的一個控件,可以說它是用戶和Android應(yīng)用進行數(shù)據(jù)傳遞的通道.通...
    OzanShareing閱讀 6,180評論 5 33
  • 一课竣、EditText(輸入框) EditText和TextView非常類似,都是用于顯示文本控件置媳,最大的區(qū)別就是E...
    颵麏閱讀 381評論 0 2
  • 1 基本UI Zealer于樟、CSDN、github StormZhang拇囊、 張弘揚(Hyman):http:/...
    征程_Journey閱讀 11,984評論 0 4
  • 前幾天迂曲,與一塊的小姐妹們聊起小時候的事,然后就聊到了各自的住處寥袭,那么今天的話題就從小院和大院說起路捧。 小時候关霸,老家的...
    薄荷的午后休閑時光閱讀 498評論 0 7