以编程方式添加的EditText与XML版本不同

时间:2012-12-09 17:17:32

标签: android layout android-edittext

我有一个包含EditText和2个按钮的XML布局。如果我单击加号按钮,则以编程方式添加新的edittext。这有效,但edittext看起来不同。根据XML,XML中定义的edittext没有任何特殊属性,所以我认为它不是特定的布局设置。

我的问题是如何让我以编程方式添加EditText看起来一样?

包含这些数字的EditText是我以编程方式添加的edittext' s。空的是在XML中创建的。

screenshot http://www.tozz.nl/temp/screenshot.png

代码:

        LinearLayout baseLayout = (LinearLayout) findViewById(R.id.baseLayout);

        LinearLayout linearLayout = new LinearLayout(getApplicationContext());
        linearLayout.setId(100 + numPlayers);
        linearLayout.setOrientation(LinearLayout.HORIZONTAL);

        EditText editText = new EditText(getApplicationContext());
        editText.setText(editText.toString().substring(25, 30));

        ImageButton delButton = new ImageButton(getApplicationContext());
        delButton.setImageResource(R.drawable.ic_delete);

        linearLayout.addView(editText);
        linearLayout.addView(delButton);

        baseLayout.addView(linearLayout);

我的XML如下:

    <LinearLayout
        android:id="@+id/linearPlayer1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <EditText
            android:id="@+id/editPlayer1"
            android:layout_width="0dip"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:layout_weight="1"
            android:gravity="center_vertical" />



        <ImageButton
            android:id="@+id/addPlayer1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/ic_input_add" />

    </LinearLayout>

2 个答案:

答案 0 :(得分:5)

Luksprog回答了我的问题:

  

在创建新视图时传递活动上下文而不是应用程序上下文。

答案 1 :(得分:3)

使用正确的LayoutParams添加这些视图会使EditText成为布局中的初始视图:

    linearLayout.addView(editText, new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,
            LinearLayout.LayoutParams.WRAP_CONTENT, 1.0f));
    linearLayout.addView(delButton, new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,
            LinearLayout.LayoutParams.WRAP_CONTENT));

    baseLayout.addView(linearLayout, new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT,
            LinearLayout.LayoutParams.WRAP_CONTENT));