У меня есть несколько всплывающих окон на моем экране, и мне нужно что-то не очень распространенное.
Я размещаю всплывающее окно с помощью заголовка + содержимого + нижнего колонтитула в LinearLayout. Но мне нужна маленькая стрелка, чтобы показать на моем компоненте.
Когда всплывающее окно находится над якорем, а стрелка вниз, я использую следующий код, чтобы нарисовать его.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/content" android:orientation="vertical"
android:layout_width="wrap_content" android:layout_height="wrap_content">
<LinearLayout android:id="@+id/header" android:background="@drawable/background_header"
android:orientation="horizontal" android:layout_width="match_parent"
android:layout_height="wrap_content">
</LinearLayout>
<HorizontalScrollView android:background="@drawable/background"
android:layout_width="wrap_content" android:layout_height="match_parent"
android:scrollbars="none">
</HorizontalScrollView>
<ImageView android:id="@+id/arrow_down" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_marginTop="-3dip"
android:src="@drawable/quickcontact_arrow_down" />
</LinearLayout>
Во время выполнения я могу поместить стрелку точно над якорем с помощью следующего кода.
ViewGroup.MarginLayoutParams param = (ViewGroup.MarginLayoutParams) mArrowDown
.getLayoutParams();
param.leftMargin = root.getMeasuredWidth()
- (screenWidth - anchor.getLeft());
И это показывают правильно.
Теперь мне нужно сделать то же самое, но стрелка должна показываться вверх.
Моя проблема в том, что стрелка должна немного перекрывать другой вид (потому что цвет фона соответствует им), поэтому нужно рисовать после.
Я попытался с FrameLayout, и у «содержимого» есть некоторый topMargin, но он не работает.
Я знаю, что это можно сделать с помощью AbsoluteLayout, но я избегаю этого любой ценой.
EDIT:
Следуя ответу Джоша, я написал следующий код.
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content" android:layout_height="wrap_content">
<LinearLayout android:id="@+id/content"
android:orientation="vertical" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:fadingEdgeLength="0dip">
<RelativeLayout android:id="@+id/header"
android:background="@drawable/background_header" android:orientation="horizontal"
android:layout_width="match_parent" android:layout_height="wrap_content">
</RelativeLayout>
<HorizontalScrollView android:background="@drawable/background"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:scrollbars="none">
</HorizontalScrollView>
</LinearLayout>
<ImageView android:id="@+id/arrow_up" android:layout_above="@id/content"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:src="@drawable/quickcontact_arrow_up" />
</RelativeLayout>
Но я не знаю почему, стрелка не показывается сейчас.