如何在android中以编程方式使用Relative Layout创建编辑文本?

时间:2017-04-12 21:23:42

标签: java android xml

我正在尝试基于旧代码在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文件中有错误吗?

1 个答案:

答案 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最终确定时,每次启动应用时都不能多次使用此方法。