在Eclipse中,我想在.java文件中设置按钮的边距(动态/编程)

时间:2015-01-27 02:20:18

标签: java android eclipse

阅读thisthis。试图应用帖子的答案,但是当我构建和运行应用程序时,按钮仍然没有边距。我做错了什么?

public class ResultsActivityA extends Activity {

    Button button, submitButton;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        //...
        LinearLayout activityResultsA= new LinearLayout(this);

        Button submitButton=new Button(this);

        LayoutParams dimensions= new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT);
        activityResultsA.setLayoutParams(dimensions);

        LayoutParams viewDimensions= new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
        LayoutParams buttonDimensions= new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);

        buttonDimensions.setMargins(50, 40, 0, 0);

        submitButton.setLayoutParams(buttonDimensions);

        activityResultsA.setOrientation(LinearLayout.VERTICAL);

        submitButton.setText("Home");
        submitButton.setId(5555);

        activityResultsA.addView(submitButton);

        setContentView(activityResultsA);
        addListenerOnButton();

    }

}

2 个答案:

答案 0 :(得分:2)

您期望的边距将出现在较低密度设备(ldpi)或中密度设备(mdpi)中,但不会出现在较高密度设备(hdpi,xxhdpi,...)中。

setMargins(top, left, bottom, right)接受px单位的int值。在您的情况下,您实际上是在传递50px40px0px

您需要将这些值从dp转换为px

public static int convertDPtoPX(Context context, int dpValue) {

     DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics();

     return dpValue * displayMetrics.densityDpi;

}

答案 1 :(得分:0)

我在((LinearLayout.LayoutParams)submitButton.getLayoutParams()).setMargins(left, top, right, bottom);之后写了addView,但是在setContentView之前写了它,并设置了边距。