2015-07-04 3 views
1

Каковы различия между этим 2 способа добавления фрагмента:различные способы добавления фрагмента

:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="horizontal" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 

    <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 

     <fragment class="com.example.android.apis.app.FragmentLayout$TitlesFragment" 
       android:id="@+id/article_fragment" 
       android:layout_weight="2" 
       android:layout_width="0dp" 
       android:layout_height="match_parent" /> 

    </FrameLayout> 
</LinearLayout> 

:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="horizontal" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 

    <fragment android:class="com.example.android.apis.app.FragmentLayout$TitlesFragment" 
       android:id="@+id/article_fragment" 
       android:layout_weight="2" 
       android:layout_width="0dp" 
       android:layout_height="match_parent" /> 

</LinearLayout> 

я знаю, что на основе this article FrameLayout:

разработан, чтобы блокировать область на экране для отображения одного элемента

так что я хочу знать, что есть какие-либо разные по внешнему виду выходов ???

ответ

1

Оба способа - одно и то же, хотя FrameLayout является избыточным.

FrameLayout как вы сказали, предназначен для блокировки области на экране, чтобы отобразить один элемент. А так, обычно используется следующим образом:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="horizontal" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 

    <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id = "@+id/fragmentContainer" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 

</LinearLayout> 

так, что позже во время выполнения, вы можете заменить его с фрагментом вашего выбора, как в этом примере:

MyFragment myFragment = MyFragment.newInstance(); 
FragmentTransaction ft = getFragmentManager().beginTransaction(); 
ft.replace(R.id.fragmentContainer, myFragment); 
ft.commit(); 
1

В основном нет разницы, вы просто добавляете уровень абстракции к своему виду.

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

Во втором варианте, вы будете иметь только возможность добавить некоторые точки зрения, до или после фрагмента (по горизонтали или по вертикали в зависимости от ориентации LinearLayout вы используете)

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

Вы можете, однако, добавить несколько детей в FrameLayout и контроля свою позицию в FrameLayout по присваивая тяжести каждому ребенку , используя андроид d: атрибут layout_gravity.

Смежные вопросы