我正在尝试基于旧代码在java代码中创建一个新的编辑文本,这是我通过XML创建的。我希望这个新的编辑文本显示在旧编辑文本的右侧和图像视图的下方,我也是用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 :(得分: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
最终确定时,每次启动应用时都不能多次使用此方法。