Android TextView 可見性切換:setVisibility 的正確用法

Android TextView 可見性切換:setVisibility 的正確用法

本文旨在幫助 android 開發(fā)者掌握如何通過按鈕點(diǎn)擊事件動態(tài)切換 TextView 的可見性。我們將深入探討 setVisibility() 方法的正確使用方式,并提供示例代碼,確保 TextView 在可見和不可見狀態(tài)之間平滑切換。

在 Android 開發(fā)中,動態(tài)控制 ui 元素的可見性是一項常見的任務(wù)。例如,我們可能希望通過點(diǎn)擊按鈕來顯示或隱藏 TextView。TextView 類的 setVisibility() 方法正是用于實(shí)現(xiàn)這一目的。然而,直接比較 textView 對象與 View.VISIBLE 這樣的常量是錯誤的。正確的做法是使用 textView.getVisibility() 方法獲取當(dāng)前 TextView 的可見性狀態(tài),然后進(jìn)行比較。

正確使用 getVisibility() 和 setVisibility()

以下代碼展示了如何正確地使用 getVisibility() 和 setVisibility() 方法來實(shí)現(xiàn) TextView 可見性的切換:

public void ShowAndHide(View view){     TextView textView = findViewById(R.id.showMe_txt); // 確保在方法內(nèi)部獲取 TextView 實(shí)例      if(textView.getVisibility() == View.VISIBLE){         textView.setVisibility(View.INVISIBLE);     } else {         textView.setVisibility(View.VISIBLE);     } }

代碼解釋:

  1. 獲取 TextView 實(shí)例: TextView textView = findViewById(R.id.showMe_txt); 這行代碼通過 findViewById() 方法獲取 xml 布局文件中定義的 TextView 實(shí)例。務(wù)必確保在每次調(diào)用 ShowAndHide 方法時都獲取一次實(shí)例,以保證 textView 對象指向當(dāng)前屏幕上的正確控件。
  2. 獲取可見性狀態(tài): textView.getVisibility() 方法返回一個整數(shù),表示 TextView 的當(dāng)前可見性狀態(tài)。它可能是 View.VISIBLE (可見), View.INVISIBLE (不可見,但占據(jù)空間), 或 View.GONE (不可見,且不占據(jù)空間)。
  3. 條件判斷: if(textView.getVisibility() == View.VISIBLE) 語句判斷 TextView 當(dāng)前是否可見。
  4. 設(shè)置可見性: textView.setVisibility(View.INVISIBLE); 將 TextView 設(shè)置為不可見狀態(tài)(占據(jù)空間)。 textView.setVisibility(View.VISIBLE); 將 TextView 設(shè)置為可見狀態(tài)。

注意事項:

  • View.INVISIBLE vs. View.GONE: View.INVISIBLE 只是讓控件不可見,但仍然占據(jù)布局空間。View.GONE 則會完全移除控件,不占據(jù)任何空間,其他控件可能會重新布局。根據(jù)實(shí)際需求選擇合適的屬性。
  • 避免空指針異常: 在使用 textView 對象之前,確保它已經(jīng)被正確初始化。如果 findViewById() 方法返回 NULL,則嘗試訪問 textView 的方法會導(dǎo)致空指針異常。
  • 性能考慮: 頻繁地改變控件的可見性可能會影響性能,尤其是在復(fù)雜的布局中。盡量避免不必要的可見性切換。

完整示例代碼:

import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView; import androidx.appcompat.app.AppCompatActivity;  public class MainActivity extends AppCompatActivity {      private TextView textView;     private Button button;      @Override     protected void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.activity_main);          textView = findViewById(R.id.showMe_txt);         button = findViewById(R.id.my_button);          button.setOnClickListener(new View.OnClickListener() {             @Override             public void onClick(View v) {                 ShowAndHide();             }         });     }      public void ShowAndHide(){         if(textView.getVisibility() == View.VISIBLE){             textView.setVisibility(View.INVISIBLE);         } else {             textView.setVisibility(View.VISIBLE);         }     } }

XML 布局文件 (activity_main.xml):

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"     android:layout_width="match_parent"     android:layout_height="match_parent"     android:orientation="vertical">      <TextView         android:id="@+id/showMe_txt"         android:layout_width="wrap_content"         android:layout_height="wrap_content"         android:text="Hello World!"         android:visibility="visible"/>      <Button         android:id="@+id/my_button"         android:layout_width="wrap_content"         android:layout_height="wrap_content"         android:text="Toggle Visibility"/>  </LinearLayout>

總結(jié):

通過正確使用 getVisibility() 方法來獲取 TextView 的當(dāng)前可見性狀態(tài),并結(jié)合 setVisibility() 方法,可以輕松實(shí)現(xiàn) TextView 可見性的動態(tài)切換。 記住區(qū)分 View.INVISIBLE 和 View.GONE 的區(qū)別,并在實(shí)際開發(fā)中根據(jù)需求進(jìn)行選擇。 確保在方法內(nèi)部獲取 TextView 實(shí)例,避免空指針異常。

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊8 分享