ฉันควรใช้วิธีการใดในการทราบว่ากิจกรรมมี contentView (เมื่อมีการเรียกใช้เมธอด setContentView () )
ฉันควรใช้วิธีการใดในการทราบว่ากิจกรรมมี contentView (เมื่อมีการเรียกใช้เมธอด setContentView () )
คำตอบ:
this.getWindow().getDecorView().findViewById(android.R.id.content)
หรือ
this.findViewById(android.R.id.content)
หรือ
this.findViewById(android.R.id.content).getRootView()
setContentView(R.layout.my_view)
ผลตอบแทนนี้ผู้ปกครองของรูปแบบที่
คุณสามารถรับมุมมองย้อนกลับได้ถ้าคุณใส่ ID ในเค้าโครงของคุณ
<RelativeLayout
android:id="@+id/my_relative_layout_id"
และเรียกมันจาก findViewById ...
findViewById
อะไรไป
View.getRootView()
คุณอาจต้องการที่จะลอง
นอกจากนี้คุณยังสามารถลบล้างonContentChanged()
สิ่งที่อยู่ท่ามกลางคนอื่นเมื่อsetContentView()
ถูกเรียก
Kotlin
this.findViewById<View>(android.R.id.content)
.rootView
.setBackgroundColor(ContextCompat.getColor(this, R.color.black))
ไม่มีวิธี "isContentViewSet" คุณสามารถใส่การร้องขอดัมมี่การเรียกใช้คุณสมบัติ Windows เข้าในบล็อคลอง / catch ก่อน setContentView เช่นนี้:
ลอง { requestWindowFeature (Window.FEATURE_CONTEXT_MENU); setContentView ( ... ) } catch (AndroidRuntimeException e) { // smth หรือไม่มีอะไรเลย }
หากตั้งค่ามุมมองเนื้อหาไว้แล้ว RequestWindowFeature จะส่งข้อยกเว้น
ตัวเลือกที่ดีที่สุดที่ฉันพบและสิ่งที่รบกวนน้อยกว่าคือตั้งแท็กพารามิเตอร์ใน 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()));
หวังว่าจะได้ผลกับคุณ
getWindow().findViewById(android.R.id.content)
:)