Android

Android overlay a view ontop of everything?

Android накладывает представление поверх всего?

Можете ли вы наложить представление поверх всего в Android?

В iPhone я бы заставил новый вид установить для него frame.origin значение (0,0), а его ширину и высоту равными ширине и высоте self.view. Добавление его в self.view затем приведет к тому, что оно будет действовать как наложение, закрывая содержимое позади (или, если у него прозрачный фон, тогда отображается вид сзади).

Есть ли похожий метод в Android? Я понимаю, что представления немного отличаются (есть три типа (или больше ...) relativelayout, linearlayout и framelayout), но есть ли какой-нибудь способ просто наложить представление поверх всего без разбора?

Переведено автоматически
Ответ 1

Просто используйте RelativeLayout или FrameLayout. Последнее дочернее представление наложит все остальное.

Android поддерживает шаблон, которого нет в Cocoa Touch SDK: управление макетом.

Макет для iPhone означает абсолютное позиционирование всего (за исключением некоторых растянутых факторов). Макет в Android означает, что дочерние элементы будут располагаться по отношению друг к другу.

Пример (второй текст редактирования полностью перекроет первый):

<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 довольно мощный. Вы можете определить такие правила, как View A должен выравнивать родительский макет снизу, View B должен выравнивать макет снизу вверх и т. Д

Обновление на основе комментария

Обычно вы устанавливаете содержимое с помощью setContentView(R.layout.your_layout) in onCreate (это увеличит макет для вас). Вы можете сделать это вручную и вызвать setContentView(inflatedView), разницы нет.

Само представление может быть одиночным представлением (например, TextView) или сложной иерархией макетов (вложенные макеты, поскольку все макеты сами являются представлениями).

После вызова setContentView ваше действие знает, как выглядит его содержимое, и вы можете использовать (FrameLayout) findViewById(R.id.root_view) для получения любого представления в этой иерархии (общий шаблон (ClassOfTheViewWithThisId) findViewById(R.id.declared_id_of_view)).

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

<LinearLayout
android:id = "@+id/Everything"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<!-- other actual layout stuff here EVERYTHING HERE -->

</LinearLayout>

<LinearLayout
android:id="@+id/overlay"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right" >
</LinearLayout>

Теперь любое представление, которое вы добавляете в LinearLayout с помощью android:id = "@+id/overlay", будет отображаться как наложение с помощью gravity = right на линейном макете с помощью android:id="@+id/Everything"

Ответ 3

Вы можете использовать bringToFront:

    View view=findViewById(R.id.btnStartGame);
view.bringToFront();
Ответ 4

Лучший способ - это ViewOverlay , вы можете добавить любое изображение в качестве наложения на любое представление в качестве его наложения, начиная с Android JellyBeanMR2 (Api 18).

Добавить mMyDrawable в mMyView качестве наложения:

mMyDrawable.setBounds(0, 0, mMyView.getMeasuredWidth(), mMyView.getMeasuredHeight())
mMyView.getOverlay().add(mMyDrawable)
java android