2012-06-26 3 views
0

Я хочу создать макет, содержащий изображение, поверх которого я хочу разместить много изображений и текстовых элементов. Я знаю, как размещать изображения друг над другом с помощью RelativeLayout, но как выровнять их по желанию? Например, я хочу, чтобы изображение было точно в месте, где мое фоновое изображение имеет определенный черный круг. Игра со значениями, такими как android: layout_marginTop и т. Д., Похоже, не влияет на каждый экран.android разместить точку зрения в определенном месте над изображением

Итак, каков правильный способ справиться с этими проблемами?

EDIT: Я не могу загрузить изображения, но я загрузил очень простой эскиз того, что я хочу здесь: http://imageshack.us/photo/my-images/715/buttonlayout.png/ все кнопки имеют также значки и текст (который должен быть TextView, так что я могу изменить его программно если необходимо)

+1

вы можете обеспечить «фон» изображение –

+0

пожалуйста, проверьте редактировать – george

ответ

1

Вам необходимо создать собственный макет, который размещает изображение именно там, где вы хотите, относительно размера родительского представления. Если вы выберете, вы можете переопределить LayoutParams и применить к ним настраиваемые атрибуты для просмотра своего пользовательского представления.

В любом случае, чтобы разместить предмет, скажем, 30% от верхнего и 20% слева, вы должны перезаписать onLayout().

@Override 
public void onLayout(boolean c, int left, int top, int right, int bottom) { 
    super.onLayout(c, left, top, right, bottom); 

    int width = right - left; 
    int height = bottom - top; 

    View v = getTheChildView(); 
    int viewL = left + (int)(width * .2f); // The left pixel is 20% down the total width of the parent view 
    int viewR = viewL + v.getWidth(); // The right pixel is the left pixel plus the measured width of the child view itself 
    int viewT = top + (int)(height * .3f); // The top pixel is 30% down the total height of the parent view 
    int viewB = top + v.getHeight(); // The bottom pixel is the top pixel plus the measured height of the child view itself 
    v.layout(viewL, viewT, viewR, viewB); 
} 
+0

Это кажется многообещающим спасибо. Вы имеете в виду реализовать этот пользовательский макет как класс, который расширяет схему, и передать этот класс мои XML-элементы? – george

+0

You может переопределить любую реализацию макета, если вы хотите использовать определенные ее элементы. Например, вы можете переопределить 'RelativeLayout', если вы хотите, чтобы другие' Views' использовали специальные атрибуты RelativeLayout, такие как 'alignParentLeft'. Если представление определяется в xml, тогда дети должны быть уже там с инфляцией макета. Вам просто нужна система для ее получения (метод getTheChildView() ». – DeeV

+0

hmmm that is clear. Я попробую и дам вам знать – george

Смежные вопросы