Каковы отношения между пикселями и масштабируемыми пикселями

Я использовал редактора макетов в затмении для копирования моего ui расположения, и затем я создал код для заполнения его динамично, и вещи обнаруживаются как различные размеры. XML, который я использую для добавления звездообразных изображений, похож на это:

<ImageView
android:src="@drawable/star_gold"
android:layout_height="22sp"
android:layout_width="22sp"
android:adjustViewBounds="true"
android:layout_marginLeft="2sp"
android:layout_marginRight="2sp" />

и Java кодирует, я использую, чтобы сделать, то же самое похоже на это:

ViewGroup.MarginLayoutParams layout = new ViewGroup.MarginLayoutParams(22, 22);
layout.setMargins(2, 0, 2, 0);
ImageView star = new ImageView(mContext);
star.setImageResource(R.drawable.star_gold);
star.setLayoutParams(layout);
star.setAdjustViewBounds(true);
holder.Stars.addView(star);

Когда я запускаю свое приложение на G1, все выстраивается в линию и выглядит хорошо, но когда я выполняю его на Droid звезды, которые я добавляю через Java, приблизительно половина размера тех, я добавляю в своем XML. Что я должен сделать, чтобы удостовериться, что все масштабируется соответственно?

Править: Это большие ответы, но я должен знать, как сделать это от кода. Когда я установил размер, это находится в необработанных пикселях, есть ли какой-либо способ установить размер в падении?

11
задан CaseyB 4 January 2010 в 17:43
поделиться

4 ответа

Поехали! Мне нужно получить DisplayMetrics Density.

// Convert the dips to pixels
final float scale = getContext().getResources().getDisplayMetrics().density;
mGestureThreshold = (int) (GESTURE_THRESHOLD_DIP * scale + 0.5f);

Спасибо всем, что указали мне правильное направление!

7
ответ дан 3 December 2019 в 01:24
поделиться

Масштабируемые пиксели изменяются в соответствии с заданным пользователем размером шрифта.

Читайте о поддержке экрана и разрешения.

Вы также найдете некоторую хорошую информацию о dp и sp в этом вопросе:

Поддержка разрешения в Android 2. 0

4
ответ дан 3 December 2019 в 01:24
поделиться

Во-первых, вы должны использовать Density Independent Pixels - dip или dp - а не Scaled Pixels - sp.

Пиксель, не зависящий от плотности, эквивалентен одному физическому пикселю на экране с разрешением 160 точек на дюйм. Если ваши ресурсы имеют размер в dpi, то они будут автоматически масштабироваться на экранах с различной плотностью; поэтому звездочки, указанные в XML, выглядят нормально. Масштабируемые пиксели похожи, но их следует использовать только для текстовых ресурсов, так как они также отражают возможности масштабирования текста.

Ваша проблема в том, что ваш Java код работает в немасштабируемых сырых пикселях, поэтому ваши звезды выглядят меньше. В документации для Android есть инструкции по преобразованию из dips в пиксели . Короче говоря, вам нужно посмотреть в поле android.util.DisplayMetrics.density.

.
18
ответ дан 3 December 2019 в 01:24
поделиться

Из документации:

Масштабно-независимые пиксели (sp) это как dp единица, но это также масштабированный по размеру шрифта пользователя предпочтение. Рекомендуется использовать этот блок при задании размеров шрифта, так что они будут настроены для обоих плотность экрана и предпочтения пользователя.

Звучит как то, что вы хотите использовать для определения размера шрифта, но я бы использовал dip для таких вещей, как margin/padding:

Density independent pixel (dip) A виртуальный пиксельный блок, приложения которого могут использовать при определении своего пользовательского интерфейса, чтобы экспресс-разметка размеров или положения в зависимости от плотности.

6
ответ дан 3 December 2019 в 01:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: