View.getRootView()でルートビューを取得する方法を知っています。onClick
引数がViewであるボタンのイベントからビューを取得することもできます。しかし、どのように私は得ることができますビューでの活動を?
View.getRootView()でルートビューを取得する方法を知っています。onClick
引数がViewであるボタンのイベントからビューを取得することもできます。しかし、どのように私は得ることができますビューでの活動を?
回答:
アクティビティのルートビューが必要な場合(コンテンツをそこに追加できるようにするため)、使用
findViewById(android.R.id.content).getRootView()
また、一部のデバイスでは使用する必要があると報告されています
getWindow().getDecorView().findViewById(android.R.id.content)
代わりに。
Boogerが報告したように、一部のデバイスではナビゲーションバー([戻る]ボタンなど)の背後にある可能性があります(ただし、ほとんどのデバイスではそうではないようです)。
setContentView()
メソッドを使用してアクティビティに追加したビューを取得する必要がある場合は、pottedmeatが書いたように使用できます
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);
ActionBar
ますか?
私はこれを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@#######
ご確認ください。
念のため誰かがもっと簡単な方法を必要としています:
次のコードは、アクティビティ全体のビューを提供します。
View v1 = getWindow().getDecorView().getRootView();
アクティビティのcertianビュー(たとえば、アクティビティ内のimageView)を取得するには、取得するビューのIDを追加するだけです。
View v1 = getWindow().getDecorView().getRootView().findViewById(R.id.imageView1);
これが誰かを助けることを願っています
findViewById(R.id.imageView1);
特定のビューが必要な場合は、アクティビティを呼び出すだけです。
現在のアクティビティのビューを取得する
どのonClickでも、「view」を使用して「View view」を取得します。rootViewを取得します。
ビューを表示= view.getRootView();
フラグメントでビューを取得する
ビューを表示する= FragmentClass.getView();
アクティビティにいる場合は、ルートビューが1つしかないと想定すると、このように取得できます。
ViewGroup viewGroup = (ViewGroup) ((ViewGroup) this
.findViewById(android.R.id.content)).getChildAt(0);
それを実際のクラスにキャストできます
またはあなたが使うことができます
getWindow().getDecorView();
これにはアクションバービューが含まれることに注意してください、あなたのビューはアクションバービューの下にあります
Activity
クラスにはそのようなメソッドはありません。
データバインディングライブラリを使用している方は、現在のアクティビティのルートを取得するには、次のコマンドを使用します。
View rootView = dataBinding.getRoot();
また、Kotlinユーザーにとってはさらに簡単です。
val rootView = dataBinding.root
setContentView()
してレンダリングするかを指示し、指定したビューはすでにルートです。そのビューのハンドルが必要な場合は、XAMLでビューにIDを配置するだけで十分findViewById()
です。