2017-04-12 16 views
0

私はXMLを使って作成した古いものに基づいて、Javaコードで新しい編集テキストを作成しようとしています。私は、この新しいエディットテキストが古いエディットテキストの右側に、私はまた、XMLで作成したイメージ図で、下に表示されるようにしたい、と私は、このためにRelativeLayoutを使用します。アンドロイドで相対レイアウトをプログラムで編集テキストを作成するにはどうすればいいですか?

private void createEditText(){ 
    RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(
      editText.getLayoutParams().width, 
      editText.getLayoutParams().height); 
    layoutParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); 
    layoutParams.addRule(RelativeLayout.RIGHT_OF, editText.getId()); 
    layoutParams.addRule(RelativeLayout.BELOW, imageView.getId()); 
    final EditText newEditText = new EditText(this); 
    newEditText.setBackgroundResource(R.drawable.rounded_edittext); 
    newEditText.setLayoutParams(layoutParams); 

    relativeLayout.addView(newEditText); 
} 

しかし、新しいです編集テキストが画面上部に表示され、コードで使用したaddRule関数は無視されます。ここにRealtiveLayoutがあります:

<RelativeLayout 
    android:id="@+id/list" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical" 
    android:gravity="center" /> 

私は間違っていますか? JavaコードまたはXMLファイルに間違いがありますか?

+0

私はよく分かりませんが、 'addView'の後に' setLayoutParams'を呼び出そうとします。 –

答えて

0

newEditTextのインデックスを設定する必要があります。 デフォルトは-1です。つまり、他のビューの前に追加されます。 relativeLayout.getChildCount(); の子の数を得ることができます。これは、子の数がnewEditTextを追加するための正しいインデックスでもあるからです。

private void createEditText(){ 
RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(
     editText.getLayoutParams().width, 
     editText.getLayoutParams().height); 
layoutParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); 
layoutParams.addRule(RelativeLayout.RIGHT_OF, editText.getId()); 
layoutParams.addRule(RelativeLayout.BELOW, imageView.getId()); 
final EditText newEditText = new EditText(this); 
newEditText.setBackgroundResource(R.drawable.rounded_edittext); 

relativeLayout.addView(newEditText,relativeLayout.getChildCount(),layoutParams); 
} 

、あなたが毎回アプリを起動複数回、このメソッドを使用することはできません念頭に置いnewEditText最終キープをしたからです。

関連する問題