如何为代码中设置的参数设置布局单位?

Posted

技术标签:

【中文标题】如何为代码中设置的参数设置布局单位?【英文标题】:How to set layout unit for parameters set in code? 【发布时间】:2012-02-17 11:58:11 【问题描述】:

我正在编写一个 android 应用程序。我的主项目中有一个活动,它继承自我的图书馆项目中的一个活动。我在基本活动中有一个自定义标题栏,它有一个按钮,它使用以下样式:

<style name="TitleButton">
    <item name="android:padding">6dp</item>
    <item name="android:layout_width">48dip</item>
    <item name="android:layout_height">48dip</item>
    <item name="android:layout_gravity">right</item>
</style>

工作正常。在我的孩子活动中,我想添加一个按钮。我可以添加按钮,它点击并工作正常,但它看起来不对。我正在添加按钮:

ImageView imgAdd = new ImageView(this, null, R.style.TitleButton);
imgAdd.setImageResource(R.drawable.add);
imgAdd.setClickable(true);
imgAdd.setOnClickListener(new OnClickListener() 
    @Override
    public void onClick(View v) 
        addGroup();
               
);

FrameLayout tb = (FrameLayout) this.findViewById(R.id.Header);

FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(
    tb.findViewById(R.id.TitleClose).getLayoutParams()
);
lp.gravity = Gravity.RIGHT;
lp.width = 48;
lp.height = 48;
lp.setMargins(0, 9, 68, 0);
imgAdd.setLayoutParams(lp);

tb.addView(imgAdd, 1);

请注意我通过代码添加的“添加”按钮太大,偏移太多。我想这一定是由于this answer 上的 cmets 中指出的,设置宽度和高度以像素为单位,而 XML 布局将它们设置为倾斜。所以,我的问题是,在代码中设置布局参数时,如何设置单位,以便我可以将我的新添加按钮设置为以倾角而不是像素为单位测量,以便正确显示?

【问题讨论】:

【参考方案1】:

您可以使用DisplayMetrics 获取当前密度并使用它来相应地设置宽度、高度和边距(reference here: px = dp * (dpi / 160))

【讨论】:

呸!骗子!从概念上讲,您所说的有道理,...唯一的问题是我的平板电脑(看起来不对)报告说它与我的手机密度相同(看起来正确)。结果,密度公式返回 1:1 的因子,因此根本不改变大小。不过还是谢谢你的想法。

以上是关于如何为代码中设置的参数设置布局单位?的主要内容,如果未能解决你的问题,请参考以下文章

获取 Vim 中设置的当前值

如何为詹金斯参数化远程触发插件设置远程主机

如何为文本小部件设置字符的最大宽度?

如何为 xz 归档器设置默认参数?

Android:如何为参数变量设置默认值

如何为 MySQL 客户端设置默认寻呼机?