Android накладывает вид на все?

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

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

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

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

Android поддерживает шаблон, который не поддерживает Cocoa Touch SDK: Управление макетами.
Макет для iPhone означает абсолютно все положение (помимо некоторых факторов strech). Макет в android означает, что дети будут размещены по отношению друг к другу.

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

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

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

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

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

 <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" будет отображаться как оверлей с гравитацией = справа на линейной компоновке с android:id="@+id/Everything"

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

  View view=findViewById(R.id.btnStartGame); view.bringToFront(); 

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

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

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

Раньше я пробовал знатоки, но это не сработало. Теперь я использовал LinearLayout вместо TextureView, теперь он работает без каких-либо проблем. Надеюсь, это поможет некоторым другим, у кого такая же проблема. 🙂

  view = (LinearLayout) findViewById(R.id.view); //this is initialized in the constructor openWindowOnButtonClick(); public void openWindowOnButtonClick() { view.setAlpha((float)0.5); FloatingActionButton fb = (FloatingActionButton) findViewById(R.id.floatingActionButton); final InputMethodManager keyboard = (InputMethodManager) getSystemService(getBaseContext().INPUT_METHOD_SERVICE); fb.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // check if the Overlay should be visible. If this value is false, it is not shown -> show it. if(view.getVisibility() == View.INVISIBLE) { view.setVisibility(View.VISIBLE); keyboard.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT, 0); Log.d("Overlay", "Klick"); } else if(view.getVisibility() == View.VISIBLE) { view.setVisibility(View.INVISIBLE); keyboard.toggleSoftInput(0, InputMethodManager.HIDE_IMPLICIT_ONLY); } 
Intereting Posts
Получение изображения из массива байтов в объекте JSON для приложения для Android Spinner добавляет строковый массив при выборе элемента, как можно получить связанное с элементом значение в android BadTokenException: невозможно добавить окно Android GridView 3 x 6 Обрезка изображений Пользовательский палец для поиска в Android Функциональность Spinner не работает на Android 6.0.1 Как преобразовать файл jar в формат apk? Почему одинаковый цвет выглядит по-разному на разных устройствах Android Отправка html-адреса электронной почты в android с помощью <table> и т. Д. – действительно ли нет встроенного способа Intent? Android Studio: импорт проекта в существующий проект Proguard не может найти ссылочный метод 'void allowCoreThreadTimeOut (boolean)' Ошибка приложения При получении идентификатора устройства Недопустимое разрешение GET_TASKS Передача дополнительных данных в шейдер фрагмента через VBO – DynamicSpriteBatch Чарджес Пончик исчезает