Почему так используется для фрагментов?
Куда бы я ни посмотрел, FrameLayout
, кажется, используется как FragmentContainer
.
Почему FrameLayout
всегда видно с Fragments
?
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"); } }