Làm cách nào để có được chế độ xem nội dung của Activity?


279

Tôi nên gọi phương thức nào để biết nếu một Activity có contentView của nó (một khi phương thức setContentView () đã được gọi)?

Câu trả lời:


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

hoặc là

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

hoặc là

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

4
hoặc getWindow().findViewById(android.R.id.content):)
Alex Lockwood

1
điều này hoạt động tốt khi tìm nạp khung nhìn Parent có liên quan ... BUt..nếu tôi thử cái này.findViewById (android.R.id.content) .setBackgroundDrawable (d); nó không hiệu quả công việc .. Bạn có thể vui lòng đề nghị .. Cảm ơn trước
Rajesh Wadhwa

3
Nếu bạn cài đặt một bố cục từ XML bằng cách sử dụng setContentView(R.layout.my_view), điều này sẽ trả về cha mẹ của bố cục đó.
Jay Lieske

Xin chào @ernest Tôi có một câu hỏi sắp xếp như Nếu trong bố cục của tôi, tôi có một hình ảnh trên đầu trang hơn hai tab trong thanh tab. và ở dưới cùng một Vệ tinh, Bạn muốn làm mờ trên các mục menu được mở.
Devendra Singh

1
nội dung không tồn tại cho Android.Resource.Id.
Justin

23

Bạn có thể lấy lại chế độ xem nếu bạn đặt ID vào Bố cục của mình.

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

Và gọi nó từ findViewById ...


Đây là cách mạnh mẽ nhất để lấy gốc của bố cục được cài đặt.
Jay Lieske

3
Bạn vượt qua để làm findViewByIdgì?
xuyên

1
@trans Xem nội dungView = findViewById (R.id.my_relative_layout_id);
Justin Liu

11

Làm thế nào về

View view = Activity.getCurrentFocus();

Làm thế nào điều này không có nhiều ngón tay cái lên? Hoạt động tuyệt vời!
aeskreis

1
@aeskreis vì trong trường hợp của tôi, nó trả về nullcurrentFocus?.let { ... }
user924


5

Bạn cũng có thể ghi đè lên onContentChanged()một trong số những người khác bị sa thải khi setContentView()được gọi.


Câu trả lời của ernest sẽ cung cấp cho bạn chế độ xem tập trung hiện tại ngay cả khi có chế độ xem có thể cuộn
YuDroid

2

Nếu bạn đang sử dụng Kotlin

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

1

Không có phương thức "isContentViewset". Bạn có thể đặt một số lệnh gọi requestWindowFeature giả vào khối try / Catch trước khi setContentView như thế này:

thử {
  requestWindowFeature (Window.FEATURE_CONTEXT_MENU);
  setContentView (...)
} Catch (AndroidR.78Exception e) {
  // làm smth hoặc không có gì
}

Nếu chế độ xem nội dung đã được đặt, requestWindowFeature sẽ đưa ra một ngoại lệ.


-3

Tùy chọn tốt nhất tôi tìm thấy và ít xâm phạm hơn, là đặt tham số thẻ trong xml của bạn, như

ĐIỆN THOẠI SỐ ĐIỆN THOẠI

<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 KHÔNG CÓ

<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>

và sau đó gọi nó trong lớp hoạt động của bạn:

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

Hy vọng nó hoạt động cho u.


2
Làm thế nào để trả lời câu hỏi này?
Onik
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.