Android: ความแตกต่างระหว่างล่องหนและหายไป?


476

อะไรคือความแตกต่างระหว่างinvisibleและgoneสำหรับสถานะการมองเห็นวิว


26
เมื่อมุมมองหายไปหมายความว่าไม่มีพื้นที่ในเค้าโครง เมื่อมองไม่เห็นมันจะใช้ห้องที่จำเป็นในการจัดวาง แต่คุณไม่เห็น
DroidBender

คำตอบ:


708

มองไม่เห็น:

มุมมองนี้มองไม่เห็น แต่ยังคงใช้พื้นที่สำหรับจุดประสงค์ของการจัดวาง

ที่ไปแล้ว:

มุมมองนี้มองไม่เห็นและไม่ใช้พื้นที่สำหรับจุดประสงค์ในการจัดวาง


113
ดูเหมือนกับdisplay:none& visibility:hiddenใน HTML / CSS :-)
anishsane

หรือเพื่อซ่อนและยุบใน Wpf XAML
juliushuck

1
หากมองไม่เห็นการคลิกจะถูกปิดใช้งานด้วยหรือไม่
Kuldeep Yadav

1
@KuldeepYadav ใช่มันจะอยู่ในทั้งไปและมองไม่เห็น
steve moretz

1
สำหรับผู้อ่านที่อยากรู้อยากเห็นในอนาคต: เรายังสามารถใช้ performItemClick ในมุมมองรายการ / กริดได้แม้จะมองไม่เห็นก็ตาม
kiranking

264

จากเอกสารคุณสามารถพูดได้ว่า

View.GONEมุมมองนี้จะมองไม่เห็นและไม่ใช้พื้นที่สำหรับจุดประสงค์ในการจัดวาง

View.INVISIBLEมุมมองนี้มองไม่เห็น แต่ยังคงใช้พื้นที่สำหรับการจัดวาง


ให้ล้างความคิดด้วยภาพบางภาพ

สมมติว่าคุณมีสามปุ่มเช่นด้านล่าง

ป้อนคำอธิบายรูปภาพที่นี่

ตอนนี้ถ้าคุณตั้งค่าการมองเห็นของปุ่มสองเป็นล่องหน ( View.INVISIBLE) แล้วผลลัพธ์จะเป็น

ป้อนคำอธิบายรูปภาพที่นี่

และเมื่อคุณตั้งค่าการมองเห็นของปุ่มสองเป็นไปแล้ว ( View.GONE) แล้วเอาท์พุทจะเป็น

ป้อนคำอธิบายรูปภาพที่นี่

หวังว่านี่จะช่วยขจัดข้อสงสัยของคุณ


4
ต้องล้างความคิดหรือไม่ ดูเหมือนชัดเจนเพียงพอสำหรับฉันจากคำอธิบาย
John Dvorak

16
@JanDvorak :) เยี่ยมมาก! ฉันไม่มีคำตอบสำหรับคำถามของคุณ หากคุณคิดว่าสิ่งนี้ชัดเจนมากสำหรับผู้ใช้ทั้งหมดคำตอบที่ได้รับการยอมรับควรเป็นความคิดเห็นและมีลิงก์ของเว็บไซต์เอกสาร ฉันถูกไหม?
Pankaj Kumar

ถ้าฉันใช้มันเพื่อ edittext เป็นไปได้ที่จะรับค่าจาก edittext?
Ashish

32

สำหรับ ListView หรือ GridView มีความแตกต่างอีกประการหนึ่งเมื่อการมองเห็นถูกตั้งค่าเป็นครั้งแรก

มองไม่เห็น:

ฟังก์ชัน getView () ของอแด็ปเตอร์เรียกว่า

ที่ไปแล้ว:

ฟังก์ชัน getView () ของอแด็ปเตอร์ไม่ได้เรียกใช้ดังนั้นจึงป้องกันมุมมองที่จะโหลดเมื่อไม่จำเป็น


10

มองไม่เห็น:
มุมมองจะต้องมีการวาดและต้องใช้เวลา

GONE:
มุมมองไม่จำเป็นต้องวาด


8
มุมมองไม่ได้ถูกดึงมาวัดและจัดวาง
cyroxis

@cyroxis บางทีเขา / เธอหมายถึงวิธีการถอนเงิน!
David

7

ฉันต้องการเพิ่มคำตอบที่ถูกต้องและประสบความสำเร็จว่าหากคุณเริ่มต้นมุมมองด้วยการมองเห็นว่าView.GONEมุมมองอาจไม่ได้เริ่มต้นและคุณจะได้รับข้อผิดพลาดแบบสุ่ม

ตัวอย่างเช่นถ้าคุณเริ่มต้นเลย์เอาต์เป็นView.GONEแล้วคุณพยายามเริ่มต้นแอนิเมชั่นจากประสบการณ์ของฉันฉันทำให้แอนิเมชั่นของฉันทำงานแบบสุ่มครั้ง บางครั้งใช่บางครั้งไม่

ดังนั้นก่อนที่จะจัดการ (ปรับขนาดย้ายอะไรก็ตาม) มุมมองคุณต้องเริ่มต้นเป็นView.VISIBLEหรือView.INVISIBLEเพื่อแสดง (วาด) ในหน้าจอแล้วจัดการ


ใช่คุณพูดถูกมันทำงานได้เฉพาะบางครั้งเมื่อดูGONE
Suraj Bahadur

4

เมื่อคุณทำให้มันหายไปทุกครั้งที่มีการคอมไพล์โปรแกรมคอมโพเนนต์จะเริ่มต้นนั่นหมายความว่าคุณกำลังลบส่วนประกอบจากเลย์เอาต์และเมื่อคุณทำให้มันมองไม่เห็นส่วนประกอบมันจะใช้พื้นที่เดียวกันในเลย์เอาต์ แต่ทุกครั้งที่คุณไม่จำเป็นต้องเริ่มต้น .

หากคุณตั้งค่า Visibility = Gone คุณจะต้องเริ่มต้นองค์ประกอบ .. like

เช่นปุ่ม _mButton = ปุ่มใหม่ (นี่);

_mButton = (ปุ่ม) findViewByid (R.id.mButton);

ดังนั้นจะใช้เวลามากกว่าเมื่อเทียบกับ Visibility = มองไม่เห็น


4
  • View.INVISIBLE -> มุมมองมองไม่เห็น แต่จะใช้พื้นที่ในเลย์เอาต์

  • View.GONE -> มุมมองมองไม่เห็นและจะไม่ใช้พื้นที่ใด ๆ ในเค้าโครง


0

View.GONE = มุมมองจะไม่แสดงและมุมมองที่เหลือจะไม่นำมาพิจารณา

View.INVISIBLE = มุมมองจะไม่แสดง แต่จะใช้พื้นที่ที่กำหนดในเค้าโครง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.