У меня есть RelativeLayout, который содержит ImageView и ImageButton.ImageView служит контейнером для фонового изображения.Теперь я пытаюсь установить кнопку в фиксированном положении, чтобы она всегда появлялась в одной и той же позиции на фоновом изображении.
Вот файл макета, который я использую:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/relativeLayout1" android:layout_height="match_parent"
android:layout_width="match_parent" android:gravity="center_horizontal">
<ImageView android:src="@drawable/bg_1" android:id="@+id/imgView"
android:adjustViewBounds="true" android:layout_height="match_parent"
android:layout_width="match_parent" />
<ImageButton android:layout_width="120dp"
android:background="@drawable/button_1" android:layout_height="30dp"
android:id="@+id/imgButton" android:layout_marginLeft="100dp"
android:layout_marginTop="170dp" />
</RelativeLayout>
Как вы можете видеть, я пытался расположить кнопку с левым / верхним полем, используя dp в качестве единицы, но это не работает.Поскольку фоновое изображение масштабируется вниз / вверх, позиция должна быть какой-то динамической.
Я понимаю, что абсолютное позиционирование со значениями пикселей для x- / y-позиции является чем-тоэто не будет работать на Android, как это объясняется здесь .Мне все еще нужно решить эту проблему, и я не уверен, как это сделать.
Нужно ли мне вычислять значения для левого / верхнего поля (не уверен, как это будет), а затем устанавливать для них что-то вроде этого?
final float density = getResources().getDisplayMetrics().density;
int width = (int)((float)120 * density);
int height = (int)((float)120 * density);
RelativeLayout.LayoutParams rlp = new RelativeLayout.LayoutParams(width, height);
rlp.leftMargin = newMargin;
rlp.topMargin = newTopMargin;
ImageButton imgButton = (ImageButton) findViewById(R.id.imgButton);
imgButton.setLayoutParams(rlp);
Надеюсь, я что-то не забыл ...
// РЕДАКТИРОВАТЬ: я думал, причина проблемы может быть в том, что масштабированное изображение имеет разные "границы",в зависимости от размера экрана.С изображением в формате 1: 1.6 на экране HVGA у меня есть черные полосы слева и справа, тогда как на экране WVGA полосы слева.Учитывая, что я использую масштабирование по умолчанию.Я посмотрю на это и напишу снова, если необходимо ...