Где бы я ни выглядел, FrameLayout
, как представляется, используется как FragmentContainer
.
Почему FrameLayout
всегда видно с помощью Fragments
?
Почему FrameLayout используется для фрагментов?
Ответ 1
В основном вы можете использовать RelativeLayout
или LinearLayout
, он все равно будет работать, но ответ на ваш вопрос находится в документации FrameLayout
:
FrameLayout предназначен для блокировки области на экране для отображения один элемент. Как правило, FrameLayout следует использовать для child view, потому что может быть сложно организовать детские представления в способ, который масштабируется до разных размеров экрана без детей перекрывая друг друга. Однако вы можете добавить нескольких детей к FrameLayout и контролировать их положение в FrameLayout присваивая тяжести каждому ребенку, используя андроид: layout_gravity атрибут.
Подробнее о FrameLayout
вы можете узнать здесь: Разработчики FrameLayout/Android
Ответ 2
Основная цель компоновки фреймов - блокировать область, необходимую для соответствия самому большому дочернему виду. Если вы используете макет кадра в качестве контейнера фрагментов, вы можете гарантировать, что у вас всегда есть место для размещения самого большого фрагмента.
В некоторых случаях вам может потребоваться иметь более 1 фрагмента на экране одновременно, в этом случае вам следует выбрать Relative или Linear Layout.
Ответ 3
Все зависит от требований пользователя и необходимости настройки.
Нет необходимости использовать FrameLayout вообще.
Например, в нижнем коде отсутствует макет, а сам фрагмент содержит только одно изображение.
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");
}
}