Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Программирование Android

Войти
Регистрация
Восстановить пароль
 
alessfan
0 / 0 / 0
Регистрация: 18.07.2015
Сообщений: 8
#1

Activity в Portrait/Landscape Orientation с разными фрагментами - Программирование Android

27.09.2016, 10:16. Просмотров 214. Ответов 5
Метки нет (Все метки)

Подскажите, как реализовать два разных фрагмента в Activity в Portrait/Landscape Orientation.
Нужно, чтобы в Portrait загружался один фрагмент, а в Landscape совершенно другой. Помещаю один content_layout в /layout-land и там даю id и layout на FragmentLandscape. Всегда грузится только один фрагмент и при перевороте просто пустой экран.

Привожу пример:

MainActivity.class
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
 
public class MainActivity extends AppCompatActivity {
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
    }
}
FragmentPortrait.class
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
 
public class FragmentPortrait extends Fragment {
 
    public FragmentPortrait() {
    }
 
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_portrait, container, false);
    }
}
FragmentLandscape.class
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
 
public class FragmentLandscape extends Fragment {
 
    public FragmentLandscape() {
    }
 
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_landscape, container, false);
    }
}
/layout/activity_main
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    tools:context="com.test.testfragments.MainActivity">
 
    <android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/AppTheme.AppBarOverlay">
 
        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="?attr/colorPrimary"
            app:popupTheme="@style/AppTheme.PopupOverlay" />
 
    </android.support.design.widget.AppBarLayout>
 
    <include layout="@layout/content_main" />
 
</android.support.design.widget.CoordinatorLayout>
/layout/content_main
XML
1
2
3
4
5
6
7
8
9
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/portraitFragment"
    android:name="com.test.testfragments.FragmentPortrait"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:layout="@layout/fragment_portrait" />
/layou/fragment_portrait
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".FragmentPortrait">
 
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Portrait"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true"
        android:textStyle="bold"
        android:textSize="30sp" />
 
</RelativeLayout>
/layout-land/content_main
XML
1
2
3
4
5
6
7
8
9
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/landscapeFragment"
    android:name="com.test.testfragments.FragmentLandscape"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:layout="@layout/fragment_landscape"/>
/layout-land/fragment_landscape
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".FragmentLandscape">
 
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Landscape"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true"
        android:textStyle="bold"
        android:textSize="30sp" />
 
</RelativeLayout>
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.09.2016, 10:16
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Activity в Portrait/Landscape Orientation с разными фрагментами (Программирование Android):

Приложение зависает, если свернуть и развернуть Activity или перейти на другую Activity - Программирование Android
У меня в параллельном потоке происходит куча apply() Решение использовать apply вместо commit было принято из-за скорости. Но...

Android - Передача данных с одного Activity на другое Activity - Программирование Android
Здравствуйте , возникла необходимость получения числовых (int и float ну или double) данных в одном Activity , а обработка и вывод...

Изменение layout-элементов одного activity из другого activity - Программирование Android
Здравствуйте! Я хочу изменить размер или цвет текста TextView в одном activity из второго activity, каким образом мне можно это...

Из одной Activity запустить функцию другой Activity - Программирование Android
например есть Activity2 которое я показываю в Dialog окошке, там у меня находятся Date and Time Picker ы (Дата - начало, Дата - окончание)...

Из одного Activity получить значение другого Activity - Программирование Android
Запускаю активити: public class MainActivity extends Activity { ... ... Intent intent = new Intent(getBaseContext(),...

Вызвать из одной activity функцию другой activity - Программирование Android
вызвать из одного activity функцию другой activity Подскажите, можно ли такое реализовать? Допустим у меня есть основная активити и...

5
OlegJV
103 / 103 / 29
Регистрация: 13.03.2016
Сообщений: 472
27.09.2016, 12:22 #2
Убери фрагменты из разметки и загружай их программно при старте Activity, предварительно проверив ориентацию.
1
Pablito
2496 / 1980 / 618
Регистрация: 12.05.2014
Сообщений: 6,921
Завершенные тесты: 1
27.09.2016, 15:30 #3
че-то многовато разметок и классов

должно быть так - один класс фрагмента и две разметки с одинаковыми названиями в папках layout и layout-land
PROFIT
1
alessfan
0 / 0 / 0
Регистрация: 18.07.2015
Сообщений: 8
27.09.2016, 15:40  [ТС] #4
Цитата Сообщение от OlegJV Посмотреть сообщение
Убери фрагменты из разметки и загружай их программно при старте Activity, предварительно проверив ориентацию.
Спасибо! Данный способ мне помог.

Цитата Сообщение от Паблито Посмотреть сообщение
че-то многовато разметок и классов
должно быть так - один класс фрагмента и две разметки с одинаковыми названиями в папках layout и layout-land
PROFIT
Спасибо! Нужно было именно два разных фрагмента с разными разметками. Абсолютно разные фрагменты для Portrait и Landscape.
0
Pablito
2496 / 1980 / 618
Регистрация: 12.05.2014
Сообщений: 6,921
Завершенные тесты: 1
27.09.2016, 15:49 #5
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
тогда проще было сделать так
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    tools:context="com.test.testfragments.MainActivity">
 
    <android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/AppTheme.AppBarOverlay">
 
        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="?attr/colorPrimary"
            app:popupTheme="@style/AppTheme.PopupOverlay" />
 
    </android.support.design.widget.AppBarLayout>
 
    <fragment 
    android:id="@+id/portraitFragment"
    android:name="com.test.testfragments.FragmentPortrait"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior" />
 
</android.support.design.widget.CoordinatorLayout>
и для landscape соответственно другая разметка активити в которой другой фрагмент
1
alessfan
0 / 0 / 0
Регистрация: 18.07.2015
Сообщений: 8
27.09.2016, 16:28  [ТС] #6
Цитата Сообщение от Паблито Посмотреть сообщение
тогда проще было сделать так
Спасибо! С вашей разметкой работает тоже. Только немогу понять. В первоначальном моем варианте по сути тоже самое, только на два layout больше (content_main). И мой первый вариант не работал. Вероятно где-то допустил ошибку.
0
27.09.2016, 16:28
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.09.2016, 16:28
Привет! Вот еще темы с ответами:

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

Как вызвать Activity не из Activity? - Программирование Android
Приложение перехватываем входящие СМС. Есть класс унаследованный от BroadcastReceiver, который обозначен в манифесте как приемник...

Создание Activity в другом Activity - Программирование Android
Нормально ли создавать экземпляр какого-либо Activity в текущем Activity? Дело в том, что код, нужный для работы с данными находится в...

Обрезка фотографии одновременно для обычного и landscape режимов - Программирование Android
Как обрезать полученную фотографию это я могу, а вот что бы обрезать одновременно для двух режимов, есть что то стандартное или писать надо...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru