1. ホーム
  2. java

Androidはすべての上にビューをオーバーレイする?

2023-08-08 16:19:32

質問

アンドロイドでは、すべてのものの上にビューを重ねることができるのですか?

iPhoneでは、新しいビューは、その frame.origin を (0,0) に設定し、その幅と高さを self.view . に追加する。 self.view を追加すると、それがオーバーレイとして動作し、後ろのコンテンツを覆います(または、それが透明な背景を持っていた場合、後ろのビューを表示します)。

アンドロイドで同じようなテクニックがあるのでしょうか?私は、ビューがわずかに異なる(relativelayout、linearlayout、framelayoutの3種類(またはそれ以上...)がある)ことを理解していますが、すべての上にビューを無差別にオーバーレイする方法はあるのでしょうか?

どのように解決するのですか?

単純に RelativeLayout または FrameLayout . 最後の子ビューは、他のすべてをオーバーレイします。

Androidは、Cocoa Touch SDKにはないパターンをサポートしています。レイアウト管理です。

レイアウト iPhoneのレイアウトは、すべてを絶対的に配置することを意味します(いくつかのストリーチ要素を除く)。アンドロイドのレイアウトは、子プロセスが互いに関連して配置されることを意味します。

例(2つ目のEditTextが1つ目のEditTextを完全に覆ってしまう)。

<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:id="@+id/root_view">

    <EditText
        android:layout_width="fill_parent"
        android:id="@+id/editText1"
        android:layout_height="fill_parent">
    </EditText>

    <EditText
        android:layout_width="fill_parent"
        android:id="@+id/editText2"
        android:layout_height="fill_parent">
        <requestFocus></requestFocus>
    </EditText>

</FrameLayout>

FrameLayout はある種のビュースタックです。特殊なケースのために作られました。

RelativeLayout はかなり強力です。以下のようなルールを定義することができます。 ビューAは親レイアウトを下に配置しなければならない , ビュー B は A を下から上に整列させなければならない など

コメントによる更新

通常、コンテンツを設定するには setContentView(R.layout.your_layout)onCreate を追加します (レイアウトを膨らませてくれます)。これを手動で行い setContentView(inflatedView) を呼び出すことができますが、違いはありません。

ビュー自体は単一のビューかもしれません(例えば TextView のような)単一のビューであったり、複雑なレイアウト階層(すべてのレイアウトはそれ自体がビューであるため、ネストされたレイアウト)であったりします。

を呼び出した後 setContentView を呼び出すと、アクティビティはそのコンテンツがどのようなものかを知り、そのコンテンツに対して (FrameLayout) findViewById(R.id.root_view) を使って、この階層内の任意のビューを取得することができます (一般的なパターン (ClassOfTheViewWithThisId) findViewById(R.id.declared_id_of_view) ).