1

私は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);

ここに画像の説明を入力

コードを使用して追加した [追加] ボタンが大きすぎ、オフセットが大きすぎることに注意してください。この回答のコメントで指摘されたことが原因であるに違いないと考えています。幅と高さを設定するとピクセル単位で設定されますが、XML レイアウトではそれらがディップで設定されます。それで、私の質問は、コードでレイアウトパラメータを設定するときに、どのように単位を設定すれば、新しい追加ボタンがピクセルではなくディップで測定されるように設定して、正しく表示されるのでしょうか?

4

1 に答える 1

2

DisplayMetricsを使用して現在の密度を取得し、それを使用してそれに応じて幅、高さ、マージンを設定できます (ここを参照: px = dp * (dpi / 160) )

于 2012-01-24T07:47:47.613 に答える