1

我在我的活动中动态添加控件。同时我正在添加一个编辑框和按钮,但在图像对齐方面面临一些问题。

在此处输入图像描述

这是我的代码,它广告 editText 和 Button 并返回到垂直对齐的线性布局。

 LinearLayout layout = new LinearLayout(this);
        layout.setOrientation(0);

        final EditText textView = new EditText(this);
        textView.setLayoutParams(lparams);
        textView.setSingleLine(true);

        final LayoutParams lparams1 = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
        final Button button = new Button(this);
        textView.setLayoutParams(lparams1);


        if(id == R.id.new_alternate_number_button)
        {
            if(contactNumber == "")
            {
            textView.setHint("Enter contact Number");
            }
            else
            {
             textView.setText(contactNumber);
            }
            textView.setInputType(InputType.TYPE_CLASS_PHONE); //to popup numpad
        }
        else
        {
            if(contactEmailID == "")
            {
                textView.setHint("Enter Email ID      ");       
            }
            else
            {
                textView.setText(contactEmailID);
            }

        }
        button.setBackgroundResource(R.drawable.ic_delete);

        button.setBackgroundResource(R.drawable.ic_delete);    
        button.setOnClickListener(deleteView);

        layout.addView(textView);
        layout.addView(button);

textView.post(new Runnable() {
            public void run() {
                textView.requestFocus();
                  InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
                  imm.showSoftInput(textView, InputMethodManager.SHOW_IMPLICIT);

            }
        });

        return layout;   

在我的 XML 文件中,我已经声明了垂直对齐的线性布局,即图标应该在屏幕的末尾,而 EditText 应该左对齐。我还需要在 EditText 和图像之间留一个空格。

提前致谢

4

3 回答 3

1

这是您如何在 Button 和 EditText 之间添加空间的方法:

LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams
    (LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);

layoutParams.setMargins(50, 0, 0, 0); // Adding margin to the left of your button
Button yourButton = new Button(this);
yourButton.setText("some text");
linearLayout.addView(yourButton, layoutParams);

setMargins 方法中的参数顺序:

android:layout_marginLeft
android:layout_marginTop
android:layout_marginRight
android:layout_marginBottom

在此处了解有关 setMargins 方法的更多信息。

于 2012-10-26T07:17:11.277 回答
1

您的 LayoutParams 设置为 WRAP_CONTENT 的 Width 而不是 FILL_PARENT(或 MATCH_PARENT)。

我在类似情况下使用的“模式”是,即使我正在动态添加新的行/部分,我仍然将它们布局在该行的 xml 文件中,然后我动态膨胀并通过 id 查找元素,并绑定到他们。有点像我们处理列表项的方式,除了在这种情况下,您没有使用列表。

通过将布局保留在 XML 文件中,可以更轻松地制作您想要查看的原型、添加填充等。如果您无法让 LinearLayout 工作,您甚至可以使用 RelativeLayout。同样,您可以在代码中完成所有这些操作,但在 XML 中进行布局提供了更大的灵活性(并且在我看来更容易处理)

于 2012-10-25T18:21:36.600 回答
1

既然我正确地意识到了您的要求(至少我猜是这样),我还有另一个答案。让我了解它如何提供帮助。

您必须为元素指定权重。假设您的布局的总 weightSum 为 8,那么如果您将 EditText 的权重指定为 7,它将占用总空间的 7/8。并将按钮的重量设置为 1,因此它将占用 1/8 的空间。我以 8 为例,您可以将其更改为您想要的任何数字,进行一些反复试验,看看哪些权重最适合您的需求。

此外,权重是浮动的,所以不要忘记数字后面的“f”,比如 1f 和 7f:

(同样,我不在我的开发机器附近,所以可能会有一些错误。但这应该可以。)

LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams
    (LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT, 7f);
// Last parameter 6f defines weight. So yourEditText will take 7/8th of the space
linearLayout.addView(yourEditText, layoutParams);


layoutParams = new LinearLayout.LayoutParams
    (LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT, 1f);
// Last parameter 6f defines weight. So yourEditText will take 1/8th of the space
linearLayout.addView(yourButton, layoutParams);

让我们看看这有什么帮助。:)

于 2012-10-26T09:43:53.250 回答