Partout où je regarde, FrameLayout
semble être utilisé comme FragmentContainer
. Pourquoi FrameLayout
est-il toujours visible avec Fragments
?
Vous pouvez essentiellement utiliser RelativeLayout
ou LinearLayout
cela fonctionnera toujours, mais la réponse à votre question se trouve dans la documentation de FrameLayout
:
FrameLayout est conçu pour bloquer une zone à l'écran pour afficher un seul élément. Généralement, FrameLayout doit être utilisé pour contenir une seule vue enfant, car il peut être difficile d'organiser les vues enfant d'une manière évolutive à différentes tailles d'écran sans que les enfants se chevauchent. Vous pouvez toutefois ajouter plusieurs enfants à un FrameLayout et contrôler leur position dans le FrameLayout en affectant la gravité à chaque enfant, à l'aide de l'attribut Android: layout_gravity.
Vous pouvez en savoir plus sur FrameLayout
ici: FrameLayout/Développeurs Android
L'objectif principal de la disposition du cadre est de bloquer la zone requise pour s'adapter à la plus grande vue enfant. Si vous utilisez une disposition de cadre comme conteneur de fragments, vous pouvez vous assurer que vous disposez toujours de l'espace disponible pour accueillir la plus grande disposition de fragments.
Dans certains cas, vous devrez peut-être avoir plus d'un fragment à l'écran simultanément.Dans ce cas, vous devriez préférer la disposition relative ou linéaire.
Tout est basé sur les besoins des utilisateurs et la personnalisation nécessaire.
Il n'est pas du tout nécessaire d'utiliser FrameLayout.
Par exemple, dans le code ci-dessous, aucune disposition n'est prise et le fragment lui-même ne contient qu'une seule image.
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");
}
}