android - setLayoutParams 无法正确显示内容

标签 android android-linearlayout layoutparams

当我使用 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 设置参数得到的: enter image description here

这是我通过编程设置参数得到的结果: enter image description here

方法 pixelsFromDP 返回 int 值:

public int pixelsFromDP(int pixels){
        return (int)(40 * getResources().getDisplayMetrics().density + 0.5f);
    }

使用这种方法的原因是在 LayoutParams 中值以像素为单位,但我需要以 dp 为单位的值,所以在这个方法中我将 dp 转换为像素取决于屏幕密度

哎呀,我发现错了!天哪我太蠢了:D

通过在方法 pixelsFromDP 中用“pixels”替换“40”解决了问题

最佳答案

我认为 LayoutParams 用于测量阶段,因此当您以编程方式执行此操作时,您必须重新测量布局,我会尝试使用 invalidate()。我对此不是 100% 确定,但我认为值得一试。

通常我会将其添加为评论,但由于我没有足够的代表,我必须将其作为答案发布。

关于android - setLayoutParams 无法正确显示内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16517362/

相关文章:

android - Place Picker 启动后自动关闭

android - 高密度屏幕上的模糊文字

android - 在 android 谷歌地图中显示大的 geojson 文件

java - 更改 ListView 行 xml 中 TextView 的属性

android - 如何动态更改自定义ActionBar标题?

java - 在 Java 中创建 LinearLayout - 元素未显示

android-layout - LinearLayout 中的重力 - android?

android - 如何设置保持屏幕打开和全屏标志?

Android 导航栏覆盖

android - 对话框android中的EditText