Почему так используется для фрагментов?


Куда бы я ни посмотрел, FrameLayout, кажется, используется как FragmentContainer. Почему FrameLayout всегда видно с Fragments?

3 33

3 ответа:

Вы можете в основном использовать RelativeLayout или LinearLayout это все равно будет работать,но ответ на ваш вопрос находится в документации FrameLayout:

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

Вы можете прочитать больше о FrameLayout здесь: FrameLayout / Android Developers

Основная цель компоновки фрейма-блокировать область, необходимую для размещения самого большого дочернего вида. Если вы используете макет фрейма в качестве контейнера фрагментов, вы можете гарантировать, что у вас всегда есть свободное пространство для размещения самого большого фрагмента макета.

В некоторых случаях вам может потребоваться иметь более 1 фрагмента на экране одновременно, в этом случае вы должны предпочесть относительную или линейную компоновку.

Все основано на требованиях пользователя и необходимой настройке.

Вовсе не обязательно использовать FrameLayout.

Например, в приведенном ниже коде нет макета, а сам фрагмент содержит только один imageview .

public class MyFragment extends Fragment implements OnClickListener{

    String TAG="MyFragment";
    Context c;
    MyFragment(Context con){
    c=con;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
    }
    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onActivityCreated(savedInstanceState);
    }
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        // TODO Auto-generated method stub

        ImageView v=new ImageView(c);
            //other imageview stuff

        return v;
    }
    @Overrides
    public void onClick(View v) {
        // TODO Auto-generated method stub
        Log.i(TAG, "onClcik");

    }
}