阅读this和this。试图应用帖子的答案,但是当我构建和运行应用程序时,按钮仍然没有边距。我做错了什么?
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();
}
}
答案 0 :(得分:2)
您期望的边距将出现在较低密度设备(ldpi)或中密度设备(mdpi)中,但不会出现在较高密度设备(hdpi,xxhdpi,...)中。
setMargins(top, left, bottom, right)
接受px单位的int值。在您的情况下,您实际上是在传递50px
,40px
和0px
。
您需要将这些值从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
之前写了它,并设置了边距。