Activity의 컨텐츠 뷰를 얻는 방법?


279

Activity에 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 2016 년

1
이것은 부모보기를 가져 오는 것에 관한 한 잘 작동합니다 ... BUt .. 이것을 시도하면 .findViewById (android.R.id.content) .setBackgroundDrawable (d); 그것은 선량 작업 .. 당신은 제안하실 수 있습니다 .. 미리 감사드립니다
Rajesh Wadhwa

3
를 사용하여 XML에서 레이아웃을 설치하면 해당 레이아웃 setContentView(R.layout.my_view)부모 를 반환합니다 .
Jay Lieske

안녕하세요 @ernest 내 레이아웃에서 탭 막대의 두 탭보다 하나의 이미지가있는 경우와 같은 정렬 질문이 있습니다. 하단에 SatelliteMenu, 메뉴 항목에서 흐리게하기를 원합니다.
Devendra Singh

1
Android.Resource.Id에 대한 콘텐츠가 없습니다.
저스틴

23

레이아웃에 ID를 넣으면 다시 볼 수 있습니다.

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

그리고 findViewById에서 호출하십시오 ...


설치된 레이아웃의 루트를 얻는 가장 강력한 방법입니다.
Jay Lieske

3
당신은 무엇을 전달 findViewById합니까?
trans

1
@ 트랜스보기 contentView = findViewById (R.id.my_relative_layout_id);
저스틴 리우

11

어때요?

View view = Activity.getCurrentFocus();

더 이상 엄지 손가락이 없습니까? 잘 작동합니다!
aeskreis

1
내 경우에는 null을 반환하기 때문에 @aeskreiscurrentFocus?.let { ... }
user924


5

또한 호출 onContentChanged()되었을 때 해고 된 것을 재정의 할 수도 있습니다 setContentView().


스크롤 뷰 포함 된 경우에도 어니스트의 대답은 당신에게 현재 초점을 맞춘보기를 줄 것이다
YuDroid

2

당신이 사용하는 경우 Kotlin

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

1

"isContentViewSet"메소드가 없습니다. 다음과 같이 setContentView 전에 try / catch 블록에 더미 requestWindowFeature 호출을 넣을 수 있습니다.

{
  requestWindowFeature (Window.FEATURE_CONTEXT_MENU);
  setContentView (...)
} catch (AndroidRuntimeException e) {
  // 아무것도하지 않거나 아무것도하지 않는다
}

컨텐츠 뷰가 이미 설정된 경우 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"/>

타블렛 XML 레이아웃

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