จะรับมุมมองเนื้อหาของกิจกรรมได้อย่างไร


279

ฉันควรใช้วิธีการใดในการทราบว่ากิจกรรมมี contentView (เมื่อมีการเรียกใช้เมธอด setContentView () )

คำตอบ:


523
this.getWindow().getDecorView().findViewById(android.R.id.content)

หรือ

this.findViewById(android.R.id.content)

หรือ

this.findViewById(android.R.id.content).getRootView()

4
หรือgetWindow().findViewById(android.R.id.content):)
Alex Lockwood

1
วิธีนี้ใช้ได้ผลดีที่สุดเท่าที่ดึงมุมมองพาเรนต์เป็นห่วง ... โปรดลองอีกครั้งถ้าฉันลองใช้งานนี้ มันทำงานได้ดีมากคุณช่วยกรุณาแนะนำ .. ขอบคุณล่วงหน้า
Rajesh Wadhwa

3
หากคุณติดตั้งรูปแบบจาก XML โดยใช้setContentView(R.layout.my_view)ผลตอบแทนนี้ผู้ปกครองของรูปแบบที่
Jay Lieske

สวัสดี @ เออร์เนสต์ฉันมีคำถามการจัดเรียงเช่นถ้าในเลย์เอาต์ของฉันฉันมีหนึ่งภาพด้านบนแท็บสองแท็บในแถบ และด้านล่างของเมนูดาวเทียม, ต้องการเบลอรายการเมนูจะเปิดขึ้น
Devendra Singh

1
ไม่มีเนื้อหาสำหรับ Android.Resource.Id
Justin

23

คุณสามารถรับมุมมองย้อนกลับได้ถ้าคุณใส่ ID ในเค้าโครงของคุณ

<RelativeLayout
    android:id="@+id/my_relative_layout_id"

และเรียกมันจาก findViewById ...


นี่เป็นวิธีที่มีประสิทธิภาพที่สุดในการรับรูทของโครงร่างที่ติดตั้ง
Jay Lieske

3
คุณส่งfindViewByIdอะไรไป
ทรานส์

1
@trans ดู contentView = findViewById (R.id.my_relative_layout_id);
Justin Liu

11

เกี่ยวกับ

View view = Activity.getCurrentFocus();

สิ่งนี้ไม่มีวิธียกนิ้วให้มากกว่านี้? ใช้งานได้ดี!
aeskreis

1
@aeskreis เพราะในกรณีของฉันมันจะคืนค่า nullcurrentFocus?.let { ... }
user924


5

นอกจากนี้คุณยังสามารถลบล้างonContentChanged()สิ่งที่อยู่ท่ามกลางคนอื่นเมื่อsetContentView()ถูกเรียก


คำตอบของ ernest จะทำให้คุณมีมุมมองที่เพ่งความสนใจในปัจจุบันแม้ว่าจะมีมุมมองที่เลื่อนได้
YuDroid

2

หากคุณกำลังใช้ Kotlin

    this.findViewById<View>(android.R.id.content)
                         .rootView
                         .setBackgroundColor(ContextCompat.getColor(this, R.color.black))

1

ไม่มีวิธี "isContentViewSet" คุณสามารถใส่การร้องขอดัมมี่การเรียกใช้คุณสมบัติ Windows เข้าในบล็อคลอง / catch ก่อน setContentView เช่นนี้:

ลอง {
  requestWindowFeature (Window.FEATURE_CONTEXT_MENU);
  setContentView ( ... )
} catch (AndroidRuntimeException e) {
  // smth หรือไม่มีอะไรเลย
}

หากตั้งค่ามุมมองเนื้อหาไว้แล้ว RequestWindowFeature จะส่งข้อยกเว้น


-3

ตัวเลือกที่ดีที่สุดที่ฉันพบและสิ่งที่รบกวนน้อยกว่าคือตั้งแท็กพารามิเตอร์ใน xml ของคุณเช่น

โครงร่าง XML ของโทรศัพท์

<android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/pager"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:tag="phone"/>

TABLET XML LAYOUT

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/pager"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:tag="tablet">

    ...

</RelativeLayout>

จากนั้นเรียกสิ่งนี้ในชั้นเรียนของคุณ:

View viewPager = findViewById(R.id.pager);
Log.d(getClass().getSimpleName(), String.valueOf(viewPager.getTag()));

หวังว่าจะได้ผลกับคุณ


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