18
在Android中,如何以编程方式在dp中设置边距?
在这个,这个和这个线程中,我试图找到一个关于如何在单个视图上设置边距的答案。但是,我想知道是否没有更简单的方法。我将解释为什么我不想使用这种方法: 我有一个自定义按钮,它扩展了Button。如果背景设置为默认背景以外的其他值(通过调用setBackgroundResource(int id)或setBackgroundDrawable(Drawable d)),则我希望边距为0。如果我这样调用: public void setBackgroundToDefault() { backgroundIsDefault = true; super.setBackgroundResource(android.R.drawable.btn_default); // Set margins somehow } 我想将页边距重置为-3dp(我已经在这里阅读了如何从像素转换为dp,所以一旦我知道如何在px中设置页边距,就可以自己管理转换了)。但是由于这是在CustomButton类中调用的,因此父类可以从LinearLayout到TableLayout有所不同,我宁愿不要让他获得其父类并检查该父级的实例。我想那也将表现不佳。 另外,在调用(使用LayoutParams)时parentLayout.addView(myCustomButton, newParams),我不知道这是否将其添加到正确的位置(不过,还没有尝试过),说出一行五行的中间按钮。 问题:除了使用LayoutParams之外,还有其他任何更简便的方法以编程方式设置单个Button的边距吗? 编辑:我知道LayoutParams的方式,但我想要一个避免处理每个不同的容器类型的解决方案: 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 …