Как установить блок макета для параметров, установленных в коде? - PullRequest
1 голос
/ 24 января 2012

Я пишу приложение для 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

Обратите внимание, что кнопка «Добавить», которую я добавил через код, слишком велика и слишком сильно смещена.Я полагаю, что это должно быть связано с тем, что было указано в комментариях к этому ответу , что установка ширины и высоты так устанавливает их в пикселях, где, как макет XML устанавливает их в dip.Итак, мой вопрос: при настройке параметров макета в коде, как вы можете установить единицу измерения, чтобы я мог настроить мою новую кнопку добавления, чтобы она измерялась в dip, а не в пикселях, чтобы она отображалась правильно?

1 Ответ

2 голосов
/ 24 января 2012

Вы можете использовать DisplayMetrics , чтобы получить плотность тока и использовать ее для соответствующей установки ширины, высоты и полей ( ссылка здесь : px = dp * (т / д / 160) )

...