どこを見ても、FrameLayout
はFragmentContainer
として使用されているようです。 FrameLayout
が常にFragments
と一緒に表示されるのはなぜですか?
基本的にRelativeLayout
またはLinearLayout
を使用できますが、機能しますが、質問の答えはFrameLayout
のドキュメントにあります。
FrameLayoutは、画面上の領域をブロックして単一のアイテムを表示するように設計されています。通常、FrameLayoutは単一の子ビューを保持するために使用する必要があります。これは、子が互いに重ならない限り、さまざまな画面サイズにスケーラブルな方法で子ビューを編成することが難しい場合があるためです。ただし、Android:layout_gravity属性を使用して各子に重力を割り当てることにより、FrameLayoutに複数の子を追加し、FrameLayout内での子の位置を制御できます。
FrameLayout
の詳細については、こちらをご覧ください。 FrameLayout/Android Developers
フレームレイアウトの主な目的は、最大の子ビューに合わせるために必要な領域をブロックすることです。フレームレイアウトをフラグメントコンテナーとして使用する場合、最大のフラグメントレイアウトを収容するためのスペースを常に確保できます。
場合によっては、画面上に同時に複数のフラグメントが必要になることがあります。その場合は、相対レイアウトまたは線形レイアウトを選択する必要があります。
すべては、ユーザーの要件と必要なカスタマイズに基づいています。
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");
}
}