当我使用xml设置布局参数时,它可以正常工作。但是当我尝试以编程方式设置布局参数时,它的工作原理是错误的。我在哪里失败了?
我需要在LinearLayout中设置参数,这里是:
<LinearLayout
android:id="@+id/buttons_layout"
android:layout_width="231dp"
android:layout_height="40dp"
android:layout_marginTop="40dp"
android:layout_marginRight="85dp"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:orientation="horizontal"
android:baselineAligned="true"
android:weightSum="603" >
以下是设置参数的代码:
rl = (LinearLayout)findViewById(R.id.buttons_layout);
lp = new RelativeLayout.LayoutParams(pixelsFromDP(231), pixelsFromDP(40));
lp.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
lp.addRule(RelativeLayout.ALIGN_PARENT_TOP);
lp.setMargins(0, pixelsFromDP(40), pixelsFromDP(85), 0);
rl.setLayoutParams(lp);
这是我通过xml设置参数得到的:
以下是我通过编程设置参数得到的内容:
方法pixelsFromDP返回int值:
public int pixelsFromDP(int pixels){
return (int)(40 * getResources().getDisplayMetrics().density + 0.5f);
}
使用此方法的原因是,在LayoutParams中,值以像素为单位,但我需要dp中的值,因此在此方法中我将dp转换为像素取决于屏幕密度
哦,天啊,我发现了一个错误!天哪,我太蠢了:D通过在方法pixelsFromDP
中将“40”替换为“像素”来解决问题答案 0 :(得分:1)
我认为LayoutParams用于测量阶段,所以当你以编程方式执行此操作时,必须重新测量布局,我会尝试使用invalidate()。我对此并不是百分之百确定,但我认为值得一试。
通常我会将此添加为评论,但由于我没有足够的代表,我必须将此作为答案发布。
答案 1 :(得分:0)
//尝试这个对我来说很好。我认为pixelFromDP()
存在一些问题 LinearLayout rl = (LinearLayout)findViewById(R.id.buttons_layout);
LayoutParams lp = new RelativeLayout.LayoutParams(231, 40);
lp.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
lp.addRule(RelativeLayout.ALIGN_PARENT_TOP);
lp.setMargins(0, 40, 85, 0);
rl.setBackgroundColor(Color.DKGRAY);
rl.setLayoutParams(lp);