如何在android中对齐图像

时间:2012-10-25 18:04:04

标签: android android-layout android-linearlayout

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

enter image description here

这是我的代码,它将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和图像之间的空格..

提前致谢

3 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分: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

Know more about setMargins method here.

答案 2 :(得分: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);

让我们看看这有多大帮助。 :)