以编程方式在编辑文本下创建新的textview

时间:2015-09-21 11:31:36

标签: android textview

我有一个带有edittext和按钮的活动,前者具有属性

android:layout_weight="1"

按下按钮时,将以编程方式创建新的文本视图。我希望新的textview出现在edittext下面。 使用我的代码,每个文本视图都在按钮的右侧创建。如何在新线上将其显示在我想要的位置? 我想,由于textview是由代码创建的,唯一的方法是以编程方式。

这是我的activity.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    android:id="@+id/new_formulas"
    >
    <EditText
        android:layout_weight="1"
        android:textSize="30dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:hint="@string/add_hint"
        android:id="@+id/add_hint"
     />
    <Button android:textSize="30dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/add"
        android:id="@+id/add"
        />
</LinearLayout>

这是我的java代码:

public class New_set extends AppCompatActivity {
private LinearLayout mLayout;
private EditText mEditText;
private Button mButton;

public static int integer = 0;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.new_set);
    mLayout = (LinearLayout) findViewById(R.id.new_formulas);
    mEditText = (EditText) findViewById(R.id.add_hint);

    mButton = (Button) findViewById(R.id.add);
    mButton.setOnClickListener(onClick());
    TextView textView = new TextView(this);
    textView.setText(mEditText.getText().toString());
}

private OnClickListener onClick() {
    return new OnClickListener() {

        @Override
        public void onClick(View v) {
            createNewTextView(mEditText.getText().toString());
        }
    };
}

private void createNewTextView(String text) {
    RelativeLayout layout = new RelativeLayout(this);

    final TextView textView = new TextView(this);
    textView.setId(integer);

    textView.setText(text);

    RelativeLayout.LayoutParams params1 =new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
    if (integer > 1)
        params1.addRule(RelativeLayout.BELOW, integer - 1);
    else
        params1.addRule(RelativeLayout.BELOW, R.id.add_hint);

    layout.setLayoutParams(params1);
    mLayout.addView(textView);
    integer +=1;

}

}

我尝试使用addRule和RelativeLayout,但它不起作用。

3 个答案:

答案 0 :(得分:1)

你可以做那样的事情

private void createNewTextView(String text) {
    final TextView textView = new TextView(this);
    textView.setId(integer);

    textView.setText(text);

    textView.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
    mLayout.addView(textView,1);
    integer +=1;

} 

更新

如果你想添加多个textview,我建议你添加一个ListView,然后在listview中添加textviews。

答案 1 :(得分:0)

使用此布局:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    android:id="@+id/new_formulas"
    >

    <Button
        android:textSize="30dp"
        android:layout_alignParentRight="true"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/add"
        android:id="@+id/add"
        />
    <EditText
        android:textSize="30dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:hint="@string/add_hint"
        android:id="@+id/add_hint"
        android:layout_alignParentLeft="true"
        android:layout_toLeftOf="@id/add"
        />
    <LinearLayout
        android:id="@+id/hints"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/add_hint"
        android:orientation="vertical"/>
</RelativeLayout>

现在,您可以像上面一样添加到TextView hints的每个孩子LinearLayout,无需使用规则。

重要提示:使用LayoutParams时,请始终使用父布局。例如,它应该是LinearLayout.LayoutParams

答案 2 :(得分:0)

试试这个。

RouteConfig