Android實現顯示和隱藏密碼功能的示例代碼

在前端中我們知道用javascript就可以可以很容易實現,那麼在Android中怎麼實現這個功能呢?

Java代碼

package com.example.test2;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.text.method.HideReturnsTransformationMethod;
import android.text.method.PasswordTransformationMethod;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageView;

public class MainActivity extends AppCompatActivity implements View.OnClickListener{

    private EditText password;
    private ImageView imageView;
    private boolean flag=true;
    private HideReturnsTransformationMethod method_show;



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

        password = findViewById(R.id.password);
        imageView = findViewById(R.id.img);
        imageView.setOnClickListener(this);


    }

    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.img:
                changeImage();

        }
    }

    private void changeImage() {
        // todo 每次進入登陸時輸入的密碼都是隱藏的
        PasswordTransformationMethod methodHide=PasswordTransformationMethod.getInstance();
        password.setTransformationMethod(methodHide);

        if(flag){
            imageView.setImageDrawable(this.getResources().getDrawable(R.drawable.eye1));
            flag=false;
            // todo 隱藏密碼
            PasswordTransformationMethod method_hide = PasswordTransformationMethod.getInstance();
            password.setTransformationMethod(method_hide);
        }
        else{
            imageView.setImageDrawable(this.getResources().getDrawable(R.drawable.eye2));
            flag=true;
            // todo  顯示密碼
            method_show= HideReturnsTransformationMethod.getInstance();
            password.setTransformationMethod(method_show);

        }

        if (!password.getText().toString().trim().equals("")) {
            password.setSelection(password.getText().toString().trim().length());//將光標移至文字末尾
        }

    }
}

佈局代碼

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:layout_height="match_parent"
    android:layout_width="match_parent"
    xmlns:android="http://schemas.android.com/apk/res/android">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:background="@color/white"
        android:orientation="horizontal" >
        <EditText
            android:id="@+id/password"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="match_parent"
            android:layout_gravity="center_vertical"
            android:layout_marginLeft="10dp"
            android:inputType="textPassword"
            android:hint="請設置登錄密碼"
            android:background="@null"/>

        <button
            android:id="@+id/btn"
            android:layout_width="89dp"
            android:layout_height="match_parent"
            android:background="@drawable/eye2"/>
        

    </LinearLayout>


</LinearLayout>

睜眼閉眼資源

Activity 類是 Android 應用的關鍵組件,而 Activity 的啟動和組合方式則是該平臺應用模型的基本組成部分。在編程范式中,應用是通過 main() 方法啟動的,而 Android 系統與此不同,它會調用與其生命周期特定階段相對應的特定回調方法來啟動 Activity 實例中的代碼。

本文介紹瞭 Activity 的概念,並提供瞭有關如何使用 Activity 的簡要說明。

Activity 的概念

移動應用體驗與桌面體驗的不同之處在於,用戶與應用的互動並不總是在同一位置開始,而是經常以不確定的方式開始。例如,如果您從主屏幕打開電子郵件應用,可能會看到電子郵件列表,如果您通過社交媒體應用啟動電子郵件應用,則可能會直接進入電子郵件應用的郵件撰寫界面。

Activity 類的目的就是促進這種范式的實現。當一個應用調用另一個應用時,調用方應用會調用另一個應用中的 Activity,而不是整個應用。通過這種方式,Activity 充當瞭應用與用戶互動的入口點。您可以將 Activity 實現為 Activity 類的子類。

Activity 提供窗口供應用在其中繪制界面。此窗口通常會填滿屏幕,但也可能比屏幕小,並浮動在其他窗口上面。通常,一個 Activity 實現應用中的一個屏幕。例如,應用中的一個 Activity 實現“偏好設置”屏幕,而另一個 Activity 實現“選擇照片”屏幕。

大多數應用包含多個屏幕,這意味著它們包含多個 Activity。通常,應用中的一個 Activity 會被指定為主 Activity,這是用戶啟動應用時出現的第一個屏幕。然後,每個 Activity 可以啟動另一個 Activity,以執行不同的操作。例如,一個簡單的電子郵件應用中的主 Activity 可能會提供顯示電子郵件收件箱的屏幕。主 Activity 可能會從該屏幕啟動其他 Activity,以提供執行寫郵件和打開郵件這類任務的屏幕。

雖然應用中的各個 Activity 協同工作形成統一的用戶體驗,但每個 Activity 與其他 Activity 之間隻存在松散的關聯,應用內不同 Activity 之間的依賴關系通常很小。事實上,Activity 經常會啟動屬於其他應用的 Activity。例如,瀏覽器應用可能會啟動社交媒體應用的“分享”Activity。

要在應用中使用 Activity,您必須在應用的清單中註冊關於 Activity 的信息,並且必須適當地管理 Activity 的生命周期。本文的後續內容將介紹這些主題。

配置清單

要使應用能夠使用 Activity,您必須在清單中聲明 Activity 及其特定屬性。

聲明 Activity

要聲明 Activity,請打開清單文件,並添加 元素作為 元素的子元素。例如:

<manifest ... >
  <application ... >
      <activity android:name=".ExampleActivity" />
      ...
  </application ... >
  ...
</manifest >

此元素唯一的必要屬性是 android:name,該屬性用於指定 Activity 的類名稱。您也可以添加用於定義標簽、圖標或界面主題等 Activity 特征的屬性。如需詳細瞭解上述及其他屬性,請參閱 元素參考文檔。

註意:發佈應用後,就不應再更改 Activity 名稱,否則可能會破壞某些功能,例如應用快捷方式。

聲明 intent 過濾器

Intent 過濾器是 Android 平臺的一項非常強大的功能。借助這項功能,您不但可以根據顯式請求啟動 Activity,還可以根據隱式請求啟動 Activity。例如,顯式請求可能會告訴系統“在 Gmail 應用中啟動‘發送電子郵件’Activity”,而隱式請求可能會告訴系統“在任何能夠完成此工作的 Activity 中啟動‘發送電子郵件’屏幕”。當系統界面詢問用戶使用哪個應用來執行任務時,這就是 intent 過濾器在起作用。

要使用此功能,您需要在 元素中聲明 屬性。此元素的定義包括 元素,以及可選的 元素和/或 元素。這些元素組合在一起,可以指定 Activity 能夠響應的 intent 類型。例如,以下代碼段展示瞭如何配置一個發送文本數據並接收其他 Activity 的文本數據發送請求的 Activity:

<activity android:name=".ExampleActivity" android:icon="@drawable/app_icon">
    <intent-filter>
        <action android:name="android.intent.action.SEND" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:mimeType="text/plain" />
    </intent-filter>
</activity>

管理 Activity 生命周期 一個 Activity 在其生命周期中會經歷多種狀態。您可以使用一系列回調來處理狀態之間的轉換。下面幾節將介紹這些回調。

onCreate()

您必須實現此回調,它會在系統創建您的 Activity 時觸發。您的實現應該初始化 Activity 的基本組件:例如,您的應用應該在此處創建視圖並將數據綁定到列表。最重要的是,您必須在此處調用 setContentView() 來定義 Activity 界面的佈局。

onCreate() 完成後,下一個回調將是 onStart()。

onStart()

onCreate() 退出後,Activity 將進入“已啟動”狀態,並對用戶可見。此回調包含 Activity 進入前臺與用戶進行互動之前的最後準備工作。

onResume()

系統會在 Activity 開始與用戶互動之前調用此回調。此時,該 Activity 位於 Activity 堆棧的頂部,並會捕獲所有用戶輸入。應用的大部分核心功能都是在 onResume() 方法中實現的。

onResume() 回調後面總是跟著 onPause() 回調。

onPause()

當 Activity 失去焦點並進入“已暫停”狀態時,系統就會調用 onPause()。例如,當用戶點按“返回”或“最近使用的應用”按鈕時,就會出現此狀態。當系統為您的 Activity 調用 onPause() 時,從技術上來說,這意味著您的 Activity 仍然部分可見,但大多數情況下,這表明用戶正在離開該 Activity,該 Activity 很快將進入“已停止”或“已恢復”狀態。

如果用戶希望界面繼續更新,則處於“已暫停”狀態的 Activity 也可以繼續更新界面。例如,顯示導航地圖屏幕或播放媒體播放器的 Activity 就屬於此類 Activity。即使此類 Activity 失去瞭焦點,用戶仍希望其界面繼續更新。

您不應使用 onPause() 來保存應用或用戶數據、進行網絡呼叫或執行數據庫事務。有關保存數據的信息,請參閱保存和恢復 Activity 狀態。

onPause() 執行完畢後,下一個回調為 onStop()或 onResume(),具體取決於 Activity 進入“已暫停”狀態後發生的情況。

onStop()

當 Activity 對用戶不再可見時,系統會調用 onStop()。出現這種情況的原因可能是 Activity 被銷毀,新的 Activity 啟動,或者現有的 Activity 正在進入“已恢復”狀態並覆蓋瞭已停止的 Activity。在所有這些情況下,停止的 Activity 都將完全不再可見。

系統調用的下一個回調將是 onRestart()(如果 Activity 重新與用戶互動)或者 onDestroy()(如果 Activity 徹底終止)。

onRestart()

當處於“已停止”狀態的 Activity 即將重啟時,系統就會調用此回調。onRestart() 會從 Activity 停止時的狀態恢復 Activity。
此回調後面總是跟著 onStart()。

onDestroy()

系統會在銷毀 Activity 之前調用此回調。

此回調是 Activity 接收的最後一個回調。通常,實現 onDestroy() 是為瞭確保在銷毀 Activity 或包含該 Activity 的進程時釋放該 Activity 的所有資源。

以上就是Android實現顯示和隱藏密碼功能的示例代碼的詳細內容,更多關於Android顯示 隱藏密碼的資料請關註WalkonNet其它相關文章!

推薦閱讀: