2015-07-27 3 views
3

Я пытаюсь реализовать панель поиска поверх представления, например, в приложении Google Play Музыка. Я не мог найти ответ для этого где-нибудь. Я пробовал отрицательный marginBottom, но большой палец был отрезан. Я нашел аналогичную запись на SO SeekBar at the top of the layout in Android, но без ответа так должен был опубликовать это. Пожалуйста помоги. Образное изображение из Google воспроизводит музыку ниже.Поиск в верхней части окна

Reference image

<FrameLayout 
    android:id="@+id/rl_pager" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    > 

    <ViewPager 
     android:id="@+id/album_art_viewpager" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"/> 


     <SeekBar 
     android:id="@+id/songProgressBar1" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginRight="-5dp" 
     android:layout_marginLeft="-5dp" 
     android:layout_gravity="bottom" 
     android:layout_marginBottom="-5dp" 
     android:progressDrawable="@drawable/apptheme_scrubber_progress_horizontal_holo_dark" 
     android:thumb= "@drawable/seekbar_thumb" 
     /> 

    <!--<View 
    <!-- android:layout_width="match_parent" 
    <!-- android:layout_height="1dp" 
    <!-- android:layout_gravity="bottom" 
    <!-- android:background="@android:color/transparent" 
    <!-- /> // Commenting this as this is not bottom view in my case 

</FrameLayout> 

Вид снизу:

<RelativeLayout 
    android:id="@+id/player_footer_bg" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_alignParentBottom="true" 

    android:layout_below="@+id/rl_pager"> 

    <ImageButton 
     android:id="@+id/btnPlay" 
     android:layout_width="@dimen/audio_player_btn_play_dimensions" 
     android:layout_height="@dimen/audio_player_btn_play_dimensions" 
     android:layout_marginBottom="10dp" 
     android:background="@null" 
     android:contentDescription="@string/play" 
     android:src="@drawable/play" 
     android:layout_alignParentBottom="true" 
     android:layout_centerHorizontal="true" /> 


    <ImageButton 
     android:id="@+id/btnNext" 
     android:layout_width="@dimen/audio_player_btn_play_dimensions" 
     android:layout_height="@dimen/audio_player_btn_play_dimensions" 
     android:background="@null" 
     android:contentDescription="@string/next" 
     android:src="@drawable/ic_skip_white" 
     android:focusable="true" 
     android:scaleType="fitCenter" 
     android:layout_alignTop="@+id/btnPlay" 
     android:layout_alignParentRight="true" 
     android:layout_alignParentEnd="true" 
     android:layout_marginRight="60dp" 
     android:layout_marginEnd="60dp" /> 


    <ImageButton 
     android:id="@+id/btnPrevious" 
     android:layout_width="@dimen/audio_player_btn_play_dimensions" 
     android:layout_height="@dimen/audio_player_btn_play_dimensions" 
     android:background="@null" 
     android:contentDescription="@string/next" 
     android:src="@drawable/ic_prev_white" 
     android:focusable="true" 
     android:scaleType="fitCenter" 
     android:layout_alignTop="@+id/btnNext" 
     android:layout_marginLeft="60dp" 
     android:layout_marginStart="60dp" /> 


</RelativeLayout> 

ответ

2

Я быстро сколотили макет, чтобы дать вам представление о том, как это сделать. Я использовал простой View с цветом фона в верхней части и в нижней части макета, чтобы вы могли ясно видеть, как он работает, а SeekBar перекрывает их оба. Затем вы можете заменить View вверху на ViewPager, а нижний - на то, что вы хотите в нижней части экрана. Обратите внимание, что layout_height на внутреннем FrameLayout удваивает отрицательный layout_marginBottom. Эти значения не имеют большого значения до тех пор, пока они достаточно велики, чтобы соответствовать вашему содержимому, а отрицательный запас составляет половину вашего layout_height (например, вы могли бы точно так же установить layout_height="50dp" и layout_marginBottom="-25dp". on the FrameLayout`, и он по-прежнему будет выглядеть правильно, хотя вы надеваете 't хотят, чтобы они были намного больше, чем необходимо, поскольку это создало бы ненужное перечеркивание перекрывающихся представлений).

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       xmlns:tools="http://schemas.android.com/tools" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       tools:context=".MyActivity"> 

    <View 
     android:id="@+id/album_art_viewpager" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_above="@id/bottomView" 
     android:background="#f00"/> 

    <View 
     android:id="@+id/bottomView" 
     android:layout_width="match_parent" 
     android:layout_height="60dp" 
     android:layout_alignParentBottom="true" 
     android:background="#00f"/> 

    <FrameLayout 
     android:layout_width="match_parent" 
     android:layout_height="40dp" 
     android:layout_above="@id/bottomView" 
     android:layout_alignBottom="@id/album_art_viewpager" 
     android:layout_marginBottom="-20dp"> 

     <SeekBar 
      android:id="@+id/songProgressBar1" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center_vertical" 
      /> 
    </FrameLayout> 

</RelativeLayout> 

Вот скриншот, чтобы показать вам, как это выглядит: Screen Shot

+0

Ваш ответ является прекрасным примером. Но в моем случае высота моего представления снизу соответствует совпадению с родительским и представлением высоты пейджера. Я рисую его из onMeasure. В этом случае панель поиска перекрывает вид снизу. Добавлен снизу в коде. – RisingUp

+0

@RisingUp Извините, но я действительно не понимаю, как макет нижнего представления, который вы теперь добавили к вопросу, соответствует первому XML-макету, который у вас есть в вопросе. Является ли представление снизу внутри «FrameLayout» из первого макета или они находятся в каком-то другом более высоком уровне «ViewGroup»? Есть ли причина, по которой вы не можете представить ее в одном XML-файле, поскольку это упростило бы понимание. Альтернативно, просмотр кода, в котором вы добавляете нижний вид, может оказаться полезным, чтобы увидеть, как два макета подходят друг другу. – HexAndBugs

+0

Наверх У меня есть FrameLayout, у которого есть Viewpager и seekbar. И ниже, у меня есть вид снизу, который я добавил. Итак, мой вопрос состоит в том, чтобы объединить представление FrameLayout и представление Bottom таким образом, что Seekbar должен появиться, как я спросил. Я оставил вид снизу отдельным, чтобы избежать путаницы для будущих читателей. Фактически оба представления FrameLayout и представление Bottom являются частью одного XML. – RisingUp

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