Вставить представление Android в верхней части иерархии представлений

#java #android #view

#java #Android #Вид

Вопрос:

Я хотел бы знать, возможно ли добавить представление в верхнюю часть иерархии представлений для моего приложения для Android. В настоящее время у меня есть класс, который получает информацию от внешней службы. Я хотел бы отобразить информацию, полученную пользователем в виде пользовательского оповещения. Возможно ли вставить это пользовательское представление в верхней части глобальной иерархии представлений, чтобы оно отображалось выше всех других представлений. Я бы предпочел не запускать новое действие, просто добавить представление поверх того, что отображается в данный момент.

Ответ №1:

ДА. Получить доступ к корневому представлению так же просто, как и найти его.

В действии:

 FrameLayout root = (FrameLayout) findViewById(android.R.id.content);
  

Поскольку корнем является a FrameLayout , вам просто нужно добавить к нему a View , чтобы он был сверху. Однако обратите внимание, что Z-порядок изменится, если вы добавите другие представления после добавления этого. В этом случае вам придется использовать ViewGroup#bringChildToFront(View view) , чтобы вернуть его на вершину.

Редактировать:

Также можно получить корневое представление из другого представления, используя View#getRootView(). Это не всегда надежно, поскольку представление может быть не присоединено к иерархии (в этом случае само представление является корневым). Или его родительского элемента может не быть в иерархии (в этом случае сам родительский элемент будет корневым).

Комментарии:

1. Что, если я хочу найти корневое представление в классе, который не является activity?

2. @AlexWilson: Я не уверен, что вы имеете в виду. Классы — это конструкции Java, и у них нет представлений.

3. Вот что мне было интересно, поэтому я не могу создать экземпляр класса view и добавить его в глобальное дерево представлений из класса, отличного от view или non activity?

4. @AlexWilson: Окно действия и иерархия представлений управляются действием. Вы не можете добавить в текущую иерархию представлений без действия. Однако вы можете создать новое окно из сервиса и добавить в него представления, что Facebook Messenger и делает с заголовками чатов. Это не будет содержаться внутри вашего приложения, хотя это то, о чем вы просили.