web-dev-qa-db-ja.com

FrameLayoutがフラグメントに使用されるのはなぜですか?

どこを見ても、FrameLayoutFragmentContainerとして使用されているようです。 FrameLayoutが常にFragmentsと一緒に表示されるのはなぜですか?

38
maysi

基本的にRelativeLayoutまたはLinearLayoutを使用できますが、機能しますが、質問の答えはFrameLayoutのドキュメントにあります。

FrameLayoutは、画面上の領域をブロックして単一のアイテムを表示するように設計されています。通常、FrameLayoutは単一の子ビューを保持するために使用する必要があります。これは、子が互いに重ならない限り、さまざまな画面サイズにスケーラブルな方法で子ビューを編成することが難しい場合があるためです。ただし、Android:layout_gravity属性を使用して各子に重力を割り当てることにより、FrameLayoutに複数の子を追加し、FrameLayout内での子の位置を制御できます。

FrameLayoutの詳細については、こちらをご覧ください。 FrameLayout/Android Developers

40
h4rd4r7c0r3

フレームレイアウトの主な目的は、最大の子ビューに合わせるために必要な領域をブロックすることです。フレームレイアウトをフラグメントコンテナーとして使用する場合、最大のフラグメントレイアウトを収容するためのスペースを常に確保できます。

場合によっては、画面上に同時に複数のフラグメントが必要になることがあります。その場合は、相対レイアウトまたは線形レイアウトを選択する必要があります。

18
Sumit Dhaniya

すべては、ユーザーの要件と必要なカスタマイズに基づいています。

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

    }
}
1
kaushal trivedi