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

时间:2012-01-24 07:36:01

标签: android layout units-of-measurement layoutparams

我正在写一个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);

enter image description here

请注意我通过代码添加的添加按钮太大,偏移太多。我认为它必须归因于this answer的评论中所指出的,设置宽度和高度因此将它们设置为像素,其中XML布局将它们设置为dip。所以,我的问题是,在代码中设置布局参数时,如何设置单位,以便我可以将我的新添加按钮设置为以倾角而不是以像素为单位进行测量,以便它显示正确?

1 个答案:

答案 0 :(得分:2)

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