programing

현재 활동에서 루트 보기 가져오기

goodsources 2023. 5. 31. 15:53
반응형

현재 활동에서 루트 보기 가져오기

View.getRootView()로 루트 뷰를 얻는 방법을 알고 있습니다.또한 버튼을 사용하여 보기를 볼 수 있습니다.onClick인수가 View인 이벤트입니다.그러나 활동에서 보기를 얻으려면 어떻게 해야 합니까?

활동의 루트 보기가 필요한 경우(내용을 추가할 수 있도록) 사용

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

또한 일부 장치에서는 사용해야 하는 것으로 보고되었습니다.

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

대신.

Booger가 보고한 바와 같이 일부 장치에서는 탐색 모음 뒤에 있을 수 있습니다(뒤로 버튼 등). 그러나 대부분의 장치에서는 그렇지 않은 것 같습니다.

사용하여 활동에 추가한 보기가 필요한 경우setContentView()그 다음에 당신이 사용할 수 있는 점박이 고기로 쓰여진 방법.

final ViewGroup viewGroup = (ViewGroup) ((ViewGroup) this
            .findViewById(android.R.id.content)).getChildAt(0);

그러나 xml 레이아웃의 이 보기에 id를 설정하고 대신 이 id를 사용하는 것이 좋습니다.

이것은 할당된 XML 파일에 있는 루트 보기를 가져오는 데 사용합니다.setContentView:

final ViewGroup viewGroup = (ViewGroup) ((ViewGroup) this
            .findViewById(android.R.id.content)).getChildAt(0);

Android 4.0.3에서 테스트했지만 다음과 같습니다.

getWindow().getDecorView().getRootView()

우리가 얻는 것과 같은 관점을 줍니다.

anyview.getRootView();

com.android.internal.policy.impl.PhoneWindow$DecorView@#########

그리고.

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

아이를 낳기

android.widget.FrameLayout@#######

확인 부탁드립니다.

현재 활동에서 루트 보기를 가져옵니다.

우리의 활동 안에서 우리는 다음을 얻을 수 있습니다.root보기 위치:

ViewGroup rootView = (ViewGroup) ((ViewGroup) this
            .findViewById(android.R.id.content)).getChildAt(0);

또는

View rootView = getWindow().getDecorView().getRootView();

코틀린에서 우리는 그것을 조금 더 짧게 할 수 있습니다.

val rootView = window.decorView.rootView

누군가 더 쉬운 방법이 필요한 경우:

다음 코드는 전체 활동을 보여줍니다.

View v1 = getWindow().getDecorView().getRootView();

활동에서 특정 보기(예: 활동 내부의 이미지 보기)를 얻으려면 원하는 해당 보기의 ID를 추가하면 됩니다.

View v1 = getWindow().getDecorView().getRootView().findViewById(R.id.imageView1);

이것이 누군가에게 도움이 되기를 바랍니다.

코틀린 확장 솔루션

활동에서 접근을 단순화하려면 이 옵션을 사용합니다.그러면 직접 다음을 참조할 수 있습니다.rootView활동에서 또는activity.rootView외부:

val Activity.rootView get() = window.decorView.rootView

일관성을 위해 fragments에 동일한 내용을 추가하려면 다음을 추가합니다.

val Fragment.rootView get() = view?.rootView

데이터 바인딩 라이브러리를 사용하는 사용자는 다음을 사용하여 현재 활동의 루트를 확인할 수 있습니다.

View rootView = dataBinding.getRoot();

Kotlin 사용자의 경우 훨씬 더 간단합니다.

val rootView = dataBinding.root

anyview.getRootView();가장 쉬운 방법이 될 것입니다.

현재 활동 보기

rootView를 얻기 위해 'view'를 사용하여 "view view"를 표시합니다.

View = view.getRootView();

그리고 뷰를 단편적으로 얻기 위해.

보기 = FragmentClass.getView();

다른 Kotlin Extension 솔루션

활동 보기가 xml로 선언된 경우(예:activity_root.xml), xml을 열고 루트 뷰에 ID를 할당합니다.

android:id="@+id/root_activity"

이제 클래스에서 다음을 사용하여 보기를 가져옵니다.

import kotlinx.android.synthetic.main.activity_root.root_activity

이제 사용할 수 있습니다.root_activity견해대로

활동 중인 경우 루트 보기가 하나만 있다고 가정하면 다음과 같이 얻을 수 있습니다.

ViewGroup viewGroup = (ViewGroup) ((ViewGroup) this
        .findViewById(android.R.id.content)).getChildAt(0);

그러면 당신은 그것을 당신의 실제 수업에 던질 수 있습니다.

또는 사용할 수 있습니다.

getWindow().getDecorView();

여기에는 수행 표시줄 뷰가 포함됩니다. 보기는 수행 표시줄 뷰 아래에 있습니다.

언급URL : https://stackoverflow.com/questions/4486034/get-root-view-from-current-activity

반응형