Как накачать другой вид из другого в Android - PullRequest
2 голосов
/ 12 августа 2011

Я знаю, что в моем onCreate() я могу раздуть представление из XML чем-то вроде:

loadingScreen = (RelativeLayout) findViewById(R.id.loadingScreen);

Но как я мог сделать это с другой точки зрения? Я пытаюсь вызвать экран загрузки, установив его видимость от GONE до VISIBLE, но, похоже, не могу понять, как это сделать из моего glSurfaceView

Ответы [ 4 ]

3 голосов
/ 12 августа 2011

Если вы хотите надуть макет, код выглядит так:

LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
LinearLayout myRoot = new LinearLayout(context);
View itemView = inflater.inflate(R.layout.layout_details, myRoot);

Здесь вы сначала создаете новый LinearLayout и затем надуваете макет с идентификатором R.layout.layout_details. Затем метод inflate возвращает представление myRoot.

Вот учебник о LayoutInflater:

1 голос
/ 12 августа 2011

Это на самом деле не раздувать. Раздувание - это процесс, который анализирует файл макета XML и создает из него структуру экземпляров классов View и ViewGroup (например, setContentView() делает это для вас в фоновом режиме).

Что вы делаете, так это получаете ссылку на представление в коде, которое вы определили в файле макета XML. Чтобы изменить видимость вашего GLSurfaceView, вы должны ссылаться на него, как вы делали выше. Но помните, что представление (GLSurfaceView в данном случае) должно быть определено в вашем файле макета.

После ссылки вы должны вызвать GLSurfaceView.setVisibility (), чтобы изменить его видимость.

Вот пример:

GLSurfaceView glsurface = (GLSurfaceView) findViewById(R.id.myglsurfaceid);
glsurface.setVisibility(View.VISIBLE);

Конечно, вы можете использовать View.INVISIBLE или View.GONE в зависимости от того, что вы хотите сделать.

Если вы ссылаетесь на макет (например, RelativeLayout), вы можете найти дочерние элементы этого макета с помощью findViewById () вашего экземпляра RelativeLayout:

RelativeLayour rl = (RelativeLayout) findViewById(R.id.mylayout);
(Button) mybutton = (Button) rl.findViewById(R.id.mybutton);

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

0 голосов
/ 12 августа 2011

Если я правильно понял, что вы хотите сделать:

Предположим, у вас есть объект glSurfaceView, и вы хотите получить представление, которое находится внутри этого объекта.Вы будете делать то же самое, что и для обычного взгляда.Скажем, кнопка:

Button button = (Button) glSurfaceView.findViewById(R.id.buttonid);

Если вы имели в виду что-то другое, дайте мне знать в комментариях.

РЕДАКТИРОВАТЬ: И тогда вы можете просто установить видимость кнопки:

button.setVisibility(Button.GONE)
0 голосов
/ 12 августа 2011

Вы не можете получить ссылку на View, которого нет в вашем текущем Layout или текущем View (текущем Activity контенте), но вы можете создать новый View из другого XML макета, используя LayoutInflater из текущего Activity.


вы можете добавить к вам текущий Activity контент, новый View, это то, что вы упомянули как «экран загрузки», даже показывая его как Dialog или создав View, а затем добавить его в корневой макет в вашем Activity

Я надеюсь, что помог вам

...