#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 и делает с заголовками чатов. Это не будет содержаться внутри вашего приложения, хотя это то, о чем вы просили.