2014-10-21 2 views
0

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

Sketch

Как я могу это сделать в XML? Кнопка всегда должна находиться над нижней частью изображения.

Вот мой XML:

<?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"> 

     <ImageView 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:layout_alignParentTop="true" 
      android:layout_alignParentLeft="true" 
      android:layout_alignParentStart="true" 
      android:adjustViewBounds="true" 
      android:scaleType="fitCenter"/> 

     <Button 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_centerHorizontal="true" 
      android:layout_alignParentBottom="true" 
      android:layout_centerInParent="true" /> 

</RelativeLayout> 

ответ

1

Я считаю, что это может быть проще сделать в RelativeLayout как таковой

<RelativeLayout ...> 
    <ImageView (image) ...> 
    <Button (button) 
     android:layout_alignParentBottom="true" 
     android:layout_centerInParent="true" /> 
</RelativeLayout> 

Добавление небольшого количества дополнения к изображению следует также добиться эффекта его перекрытия дно. С этим вы легко можете поставить кнопку, где хотите.

Вот пример кода, ввести в действие и работает на тестовом приложении я сделал:

<?xml version="1.0" encoding="utf-8"?> 

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" android:layout_width="wrap_content" 
android:layout_height="200dp"> 
<ImageView 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_alignParentTop="true" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentStart="true" 
    android:adjustViewBounds="true" 
    android:scaleType="fitCenter" 
    android:src="@drawable/login_logo" 
    android:paddingEnd="0dp" 
    android:paddingStart="0dp" 
    android:paddingBottom="15dp" /> 
<Button 
    android:layout_width="100dp" 
    android:layout_height="50dp" 
    android:layout_centerHorizontal="true" 
    android:layout_alignParentBottom="true" 
    android:layout_centerInParent="true" /> 
</RelativeLayout> 

Here's изображение показывая его в действии, извините за меньше, чем идеальный образ, который я использовал в качестве пример.

+0

Но мне нужно опустить кнопку в нижней строке ImageView, вот моя проблема –

+0

Редактирование ответа должно быть тем, что вы ищете. –

+0

Я получаю 'Ошибка: (176) Идентификатор ресурса не найден для атрибута 'layout_alignParentCenter' в пакете 'android'' –

0

Невозможно сделать это, естественно, в android (pre Lollipop). Мое предложение состоит в том, чтобы обмануть вас, чтобы вы считали, что вы ошеломляете один вид над другим.

<?xml version="1.0" encoding="utf-8"?> 

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/full_header" 
    android:layout_width="match_parent" 
    android:layout_height="148" 
    android:clipChildren="false"> 
    <ImageView 
     android:id="@+id/background_image" 
     android:layout_width="wrap_content" 
     android:layout_height="120dp" 
     android:contentDescription="@string/background_image_contentdescription" 
     android:adjustViewBounds="true" 
     android:layout_alignParentTop="true"/> 
    <Button 
     android:layout_width="match_parent" 
     android:layout_height="56dp" 
     android:layout_alignParentBottom="true"> 
    </Button> 

</RelativeLayout> 

Тогда в коде, когда я настраиваю этот вид.

//The large view is an Image with a fixed height of 120dp 
int bgImageHeight = FSUtils.dpToPixels(120, getResources().getDisplayMetrics()); 
//The small view is a Relative Layout with a fixed height of 56 dp. 
int dataLeafHeight = FSUtils.dpToPixels(56, getResources().getDisplayMetrics()); 
//The full header contains the two and its minimum height is set 
// to the height of the large image + half the height of the small view 
full_header.setMinimumHeight(bgImageHeight + dataLeafHeight/2); 

Затем вы используете выравнивания родительского дна и выровнять родительскую вершину, чтобы тянуть вид на верхней и нижней части делает меньший вид потрясает границу большого зрения фона.

Я считаю, что есть способ сделать это в новой ОС LolliPop, но я еще не экспериментировал с ней. Может быть, кто-то еще может это сделать.

Надеюсь, это поможет. Happy Code

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