Реально ли открыть Активити в Активити?

Рейтинг: 0Ответов: 1Опубликовано: 01.12.2014

Привет.

Есть MainActivity, в котором есть 4 вкладки (TabHost и TabWidget), в каждой вкладке свои активити подгружаются, все они подобные. В них ListView, который берет данные с инета! По клику на каждый пункт должен открываться WebView.

Все это у меня работает. Но есть одно "но": ВебВью открывается как бы по верх всего, а должен открываться в MainActivity и в той же вкладке, где его и открыли, т.е. при открытии WebView тоже должны быть видны табы.

Не подскажите как сделать?

Ответы

▲ 3Принят

Активити в активити отобразить нельзя, однако можно схитрить.
Я прошу вас очень тщательно обдумать написание такого кода, прислушайтесь к совету @monomi про Fragments!
Итак, если я вас правильно понял, то вы хотите получить результат, похожий на этот:

жёлтое - часть родительской активити, которую хотите видеть при работающем WebView
зелёное - дочерняя активити с WebView, показывающаяся поверх всего

alt text
Приступим!
1. Открываем AndroidManifest.xml, ищем дочернюю активити с WebView и добавляем:
android:theme="@android:style/Theme.Translucent"
2. Открываем код родительской активити и выполняем расчёт размеров дочерней активити. Нам понадобятся размеры экрана и высота ActionBar. Как всё это получить - гуглите. Теперь немного псевдокода:

ширинаАктивити = ширинаЭкрана;
высотаАктивити = высотаЭкрана - высотаЭкшнбара;

3. Теперь добавляем высоту, ширину и остальные данные в Intent и стартуем дочернюю активити. В onCreate дочерней активити пишем код:

Intent mIntent = getIntent(); //сначала любым нужным для вас способом получите отправленные данные
//получаем переданные высоту и ширину
int width = mIntent.getIntExtra(...);
int height = mIntent.getIntExtra(...);
//Настраиваем окно дочерней активити
WindowManager.LayoutParams lp = getWindow().getAttributes();
lp.width = width; //устанавливаем ширину
lp.height = height; //...и высоту
lp.gravity = Gravity.BOTTOM; //опускаем окно вниз
getWindow().setAttributes(lp); //применяем настройки
//И ТОЛЬКО ПОТОМ ВЫЗЫВАЕМ setContentView И ВСЁ ОСТАЛЬНОЕ!!!