web-dev-qa-db-fra.com

Pourquoi un FrameLayout est-il utilisé pour les fragments?

Partout où je regarde, FrameLayout semble être utilisé comme FragmentContainer. Pourquoi FrameLayout est-il toujours visible avec Fragments?

38
maysi

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

40
h4rd4r7c0r3

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.

18
Sumit Dhaniya

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");

    }
}
1
kaushal trivedi