以编程方式添加带有权重的EditText

时间:2015-05-24 02:48:27

标签: java android android-layout android-layout-weight

我已经在其中创建了一个Vertical LinearLayout,其中包含一个Horizo​​ntal LinearLayout,以便在其中容纳3个EditText框以进行数据输入。我还在垂直LinearLayout下方放置了一个按钮,我想编程以在每次按下时添加另一行editText。

到目前为止我已成功并设法以编程方式添加另一行,其中包含1个edittext。然后我尝试了3并且遇到了障碍。我尝试使用权重和权重将editText框放在3列中。但是使用下面的代码,我得到两个相互靠近的editText框,然后是一个非常小的编辑框作为最后一个。

我做错了什么?为什么编辑文本框的宽度除以3?

XML:

        <LinearLayout android:id="@+id/layout_ingredients"
            android:layout_below="@id/text_recipeIngredients"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:weightSum="3"
                android:orientation="horizontal">

                <EditText android:id="@+id/edit_recipeIngredient"
                    android:layout_width="0dp"
                    android:layout_weight="1"
                    android:layout_height="wrap_content"
                    android:hint="@string/edit_recipe_ingredient"/>

                <EditText android:id="@+id/edit_recipeAmount"
                    android:layout_width="0dp"
                    android:layout_weight="1"
                    android:layout_height="wrap_content"
                    android:hint="@string/edit_recipe_amount"/>

                <EditText android:id="@+id/edit_recipeUnit"
                    android:layout_width="0dp"
                    android:layout_weight="1"
                    android:layout_height="wrap_content"
                    android:hint="@string/edit_recipe_unit"/>

            </LinearLayout>

        </LinearLayout>

        <Button android:id="@+id/btn_add_ingredient"
            android:background="@color/orange"
            android:layout_marginTop="10dp"
            android:layout_below="@id/layout_ingredients"
            android:layout_width="match_parent"
            android:layout_height="100dp"
            android:text="@string/btn_add_ingredient"
            android:onClick="addIngredients"/>

爪哇:

public void addIngredients(View view) {

    final String ADDINGREDIENT = "ADD INGREDIENT";

    Log.d(ADDINGREDIENT, ADDINGREDIENT);

    LinearLayout linearLayout = (LinearLayout)findViewById(R.id.layout_ingredients);

    LinearLayout ingredientLayout = new LinearLayout(this);
    ingredientLayout.setLayoutParams(new LinearLayout.LayoutParams(
            LinearLayout.LayoutParams.MATCH_PARENT,
            LinearLayout.LayoutParams.WRAP_CONTENT));
    ingredientLayout.setOrientation(LinearLayout.HORIZONTAL);
    ingredientLayout.setWeightSum(3f);

    EditText editTextIngredient = new EditText(this);
    editTextIngredient.setHint("Ingredient");
    editTextIngredient.setLayoutParams(new LinearLayout.LayoutParams(
            0,
            LinearLayout.LayoutParams.WRAP_CONTENT,
            1f));

    EditText editTextAmount = new EditText(this);
    editTextAmount.setHint("Amount");
    editTextAmount.setLayoutParams(new LinearLayout.LayoutParams(
            0,
            LinearLayout.LayoutParams.WRAP_CONTENT,
            1f));

    EditText editTextUnit = new EditText(this);
    editTextAmount.setHint("Unit");
    editTextAmount.setLayoutParams(new LinearLayout.LayoutParams(
            0,
            LinearLayout.LayoutParams.WRAP_CONTENT,
            1f));

    ingredientLayout.addView(editTextIngredient);
    ingredientLayout.addView(editTextAmount);
    ingredientLayout.addView(editTextUnit);

    linearLayout.addView(ingredientLayout);

}

1 个答案:

答案 0 :(得分:0)

这里的问题是您将加权布局添加到屏幕上没有的布局,因此在添加它们时它的宽度是未知的。

你有几种方法,但最简单的方法可能是获取屏幕上已经存在的元素的宽度并简单地复制它们(因为你开始使用加权布局)。

您还可以测量屏幕并使用该测量值来设置每个布局的宽度。

最后,您可以在添加父级并且已知宽度后使用ViewTreeObserver添加它们(请参阅此处的帖子:Getting the width/height of a layout in Android)。

最后一个是最“有趣”但效率最低且最有用的,因为你的原始布局已经完成了计算。