2012-11-02 12 views
8

RelativeLayoutを設計しました。私はそれに断片を追加しようとしています。それは重なる。それが他のものの下に来るように私は何をする必要がありますか。relativelayoutでプログラムでフラグメントを追加する方法

//私は、向きを垂直に設定しても、myFragmentとmyFragment2のビューは重なります。

<RelativeLayout 
    android:id="@+id/idll1" 
    android:layout_width="fill_parent" 
    android:layout_height="50dp" 
    android:layout_marginLeft="10sp" 
    android:layout_marginRight="0sp" 
    android:layout_marginTop="10sp" 
    android:layout_weight="1" 
    android:paddingBottom="5dp" 
    android:paddingLeft="10dp" 
    android:paddingRight="5dp" 
    android:paddingTop="5dp" 
    android:orientation="vertical"/> 

答えて

0

私はそれはあなたがあなたのフラグメントの見解でレイアウトpraramsを設定する必要がLinearLayout

+0

Line t.commit()の後にLinearLayoutを使用するとどうなりますか。私はボタンを追加しようとします。 layout.addView(ボタン)。次に、ボタンが上部に配置され、2つのフラグメントが下に降ります。私は、2つのフラグメントビューが順番にまたは追加されてからボタンの順に表示されることを期待しています。しかし、それは起こらない。何かご意見は? – Satish

2

されるべきだと思います。

XMLまたはハードコードですか?

ハードコードの場合、Googleが後方互換性のあるサポートライブラリを使用してすべてのフラグメントのビューに配置し、そのrelativelayoutパラメータをビューのonlayoutまたはonMeasureのいずれかに設定するFrameLayoutラッパーを取得する必要があります。

XMLであれば、相対ルールを設定するだけです。

4

次のように我々はそれを行うことができます:相対的なレイアウトが存在する

Activityクラスを。相対レイアウト(mParentLayout)をアクティビティーのビュー階層のルート要素とします。 相対レイアウトに追加するフラグメントは、ボタン(mGridBtn)の下の位置にあるmGridFragmentになります。アクティビティのレイアウト内に配置される

public class DroidOpsActivity extends FragmentActivity implements 
    OnClickListener { 

    private RelativeLayout mParentLayout = null; 
    private Button mGridBtn = null; 
    private FragmentManager mFragmentMgr = null; 
    private FragmentTransaction mFragmentTransc = null; 
    private Fragment mGridFragment = null; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     initialize(); 
    } 

    private void initialize() { 
     setContentView(R.layout.activity_droid_ops); 
     mParentLayout = (RelativeLayout) findViewById(R.id.parent_layout); 
     mGridBtn = (Button) findViewById(R.id.grid_button); 
     mFragmentMgr = getSupportFragmentManager(); 
     registerListener(); 
    } 

    private void registerListener() { 
     mGridBtn.setOnClickListener(this); 
    } 

    @Override 
    public void onClick(View v) { 
     switch (v.getId()) { 
     case R.id.grid_button: 
        loadFragment(); 
        mGridBtn.setEnabled(false); 
     break; 
     } 
    } 

    private void loadFragment() { 
     mGridFragment = new DroidOpsFragments(); 
     mFragmentTransc = mFragmentMgr.beginTransaction(); 
     mFragmentTransc.add(mParentLayout.getId(), mGridFragment); 
     mFragmentTransc.addToBackStack(null); 
     mFragmentTransc.commit(); 
    } 

    public RelativeLayout.LayoutParams fetchLayoutParams() { 
     RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(
        LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); 

     // We can add any rule available for RelativeLayout and hence can position accordingly 
     params.addRule(RelativeLayout.BELOW, mGridBtn.getId()); 
     return params; 
    } 
} 

対応するフラグメントクラス。

public class DroidOpsFragments extends Fragment { 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
        Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.view_word_grid, null); 

     // Here we are fetching the layoutParams from parent activity and setting it to the fragment's view. 

     view.setLayoutParams(((DroidOpsActivity) activity).fetchLayoutParams()); 
     return view; 
    } 

} 
+0

ありがとうございます。私は一時的にこのプロジェクトから離れているので、これを確認する時間がありませんでした。しかし、間違いなく私はこれをチェックし、それがうまくいくならあなたの答えを受け入れます。 – Satish

0

迅速かつ汚いは少し良くなるようです。あなたのレイアウトをすでに知っていれば、いくつかのステップを救うことができます。ブロックの集合(X instanceof Class)がびっくりした場合、巨大なことが分かります。

@Override 
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 
     super.onViewCreated(view, savedInstanceState); 

     ViewGroup.LayoutParams p = view.getLayoutParams(); 
     if (p instanceof CoordinatorLayout.LayoutParams) { 
      CoordinatorLayout.LayoutParams params = ((CoordinatorLayout.LayoutParams)p); 
      params.gravity = Gravity.END | Gravity.BOTTOM; 
      view.setLayoutParams(params); 
     } 
     else if (p instanceof RelativeLayout.LayoutParams) { 
      RelativeLayout.LayoutParams params = ((RelativeLayout.LayoutParams)p); 
      params.addRule(RelativeLayout.ALIGN_BOTTOM); 
      view.setLayoutParams(params); 
     } 
} 
関連する問題