在 this 、 this 和 this 线程中,我试图找到有关如何在单个 View 上设置边距的答案。但是,我想知道是否没有更简单的方法。我将解释为什么我不想使用这种方法:
我有一个扩展按钮的自定义按钮。如果背景设置为默认背景以外的其他内容(通过调用 setBackgroundResource(int id)
或 setBackgroundDrawable(Drawable d)
),我希望边距为 0。如果我称之为:
public void setBackgroundToDefault() {
backgroundIsDefault = true;
super.setBackgroundResource(android.R.drawable.btn_default);
// Set margins somehow
}
CustomButton
类中调用的,因此父级可以从 LinearLayout 到 TableLayout 不等,我宁愿不让他获取他的父级并检查该父级的实例。我想,这也将是非常低效的。parentLayout.addView(myCustomButton, newParams)
时,我不知道这是否将它添加到正确的位置(但是没有尝试过),比如五个行的中间按钮。ViewGroup.LayoutParams p = this.getLayoutParams();
if (p instanceof LinearLayout.LayoutParams) {
LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams)p;
if (_default) lp.setMargins(mc.oml, mc.omt, mc.omr, mc.omb);
else lp.setMargins(mc.ml, mc.mt, mc.mr, mc.mb);
this.setLayoutParams(lp);
}
else if (p instanceof RelativeLayout.LayoutParams) {
RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams)p;
if (_default) lp.setMargins(mc.oml, mc.omt, mc.omr, mc.omb);
else lp.setMargins(mc.ml, mc.mt, mc.mr, mc.mb);
this.setLayoutParams(lp);
}
else if (p instanceof TableRow.LayoutParams) {
TableRow.LayoutParams lp = (TableRow.LayoutParams)p;
if (_default) lp.setMargins(mc.oml, mc.omt, mc.omr, mc.omb);
else lp.setMargins(mc.ml, mc.mt, mc.mr, mc.mb);
this.setLayoutParams(lp);
}
}
this.getLayoutParams();
返回一个 ViewGroup.LayoutParams
,它没有属性 topMargin
、 bottomMargin
、 leftMargin
、 rightMargin
。MarginContainer
,其中包含偏移 (-3dp) 边距和 (oml, omr, omt, omb) 和原始边距 (ml, mr, mt, mb)。
您应该使用 LayoutParams
设置按钮边距:
LayoutParams params = new LayoutParams(
LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT
);
params.setMargins(left, top, right, bottom);
yourbutton.setLayoutParams(params);
RelativeLayout.LayoutParams
或 LinearLayout.LayoutParams
.Resources r = mContext.getResources();
int px = (int) TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_DIP,
yourdpmeasure,
r.getDisplayMetrics()
);
关于android - 在 Android 中,如何以编程方式在 dp 中设置边距?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12728255/
欢迎光临 OGeek|极客世界-中国程序员成长平台 (http://jike.in/) | Powered by Discuz! X3.4 |