2016-02-22 2 views
2

Я использую Android-ObservableScrollView Library (https://github.com/ksoichiro/Android-ObservableScrollView) для реализации заголовка (Relative Layout), который исчезает при прокрутке спискаViewView. Этот listView встроен в viewPager для накопления функций Tab. Вот скриншот моего макета:Как я могу получить представление в виде вкладок, чтобы заполнить весь экран при использовании наблюдаемого вида прокрутки?

Layout at default state

Я реализовал ниже код для анимации и скрыть заголовок успешно.

fragment_profile.xml:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <RelativeLayout 
     android:id="@+id/profile_header" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content"> 

     <!--Header Layout Code--> 

    </RelativeLayout> 

    <RelativeLayout 
     android:id="@+id/profile_tab_layout" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_below="@id/profile_header" 
     > 

     <android.support.design.widget.TabLayout 
      android:id="@+id/tab_layout" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:minHeight="20dp" 
      android:layout_alignParentTop="true" 
      android:background="@color/background" 
      app:tabTextColor="@color/rosso_corsa" 
      app:tabSelectedTextColor="@color/rosso_corsa" 
      app:tabIndicatorColor="@color/rosso_corsa" 
      app:tabIndicatorHeight="2dp" 
      /> 

     <android.support.v4.view.ViewPager 
      android:id="@+id/tab_pager" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:layout_below="@id/tab_layout" 
      /> 

    </RelativeLayout> 

</RelativeLayout> 

fragment_profile_posts_tab.xml: (Это фрагмент, который загружается в ViewPager)

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    android:id="@+id/profile_posts_tab" 
    > 

    <com.github.ksoichiro.android.observablescrollview.ObservableListView 
     android:id="@android:id/list" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     /> 

</FrameLayout> 

ProfilePostsTabFragment.java:

public class ProfilePostsTabFragment extends android.support.v4.app.ListFragment implements ObservableScrollViewCallbacks { 

    private RelativeLayout profileHeader; 
    private RelativeLayout profileTabLayout; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.fragment_profile_posts_tab, container, false); 

     ObservableListView listView = (ObservableListView) view.findViewById(android.R.id.list); 
     listView.setScrollViewCallbacks(this); 

     return view; 
    } 

    @Override 
    public void onScrollChanged(int scrollY, boolean firstScroll, boolean dragging) { 
    } 

    @Override 
    public void onDownMotionEvent() { 
    } 

    @Override 
    public void onUpOrCancelMotionEvent(ScrollState scrollState) { 
     if (scrollState == ScrollState.UP) { 
      if (profileHeaderIsShown()) { 
       hideProfileHeader(); 
      } 
     } else if (scrollState == ScrollState.DOWN) { 
      if (profileHeaderIsHidden()) { 
       showProfileHeader(); 
      } 
     } 
    } 

    private boolean profileHeaderIsShown() { 
     // Toolbar is 0 in Y-axis, so we can say it's shown. 
     return profileHeader.getTranslationY() == 0; 
    } 

    private boolean profileHeaderIsHidden() { 
     // Toolbar is outside of the screen and absolute Y matches the height of it. 
     // So we can say it's hidden. 
     return profileHeader.getTranslationY() == -profileHeader.getHeight(); 
    } 

    private void showProfileHeader() { 
     moveProfileHeader(0); 
    } 

    private void hideProfileHeader() { 
     moveProfileHeader(-profileHeader.getHeight()); 
    } 

    private void moveProfileHeader(float toTranslationY) { 
     // Check the current translationY 
     if (profileHeader.getTranslationY() == toTranslationY) { 
      return; 
     } 

     ValueAnimator animator = ValueAnimator.ofFloat(profileHeader.getTranslationY(), toTranslationY).setDuration(200); 
     animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { 
      @Override 
      public void onAnimationUpdate(ValueAnimator animation) { 
       float translationY = (float) animation.getAnimatedValue(); 
       profileHeader.setTranslationY(translationY); 
       profileTabLayout.setTranslationY(translationY); 
       RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams) profileTabLayout.getLayoutParams(); 
       lp.height = getContainerHeight(); 
       profileTabLayout.setLayoutParams(lp); 
       profileTabLayout.requestLayout(); 
      } 
     }); 
     animator.start(); 
    } 

    private int getContainerHeight() { 
     return (getActivity().findViewById(R.id.fragment_container)).getHeight(); 
    } 

    @Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 
     //Setting Values to the String passed - Tutorial stuff 
     String[] values = new String[] { "Iron Man", "Captain America", "Thor", 
       "Hulk", "Black Widow", "Spider Man", "Scarlet Witch", "Black Panther", 
       "War Machine", "Bucky" }; 

     this.profileHeader = (RelativeLayout) getActivity().findViewById(R.id.profile_header); 
     this.profileTabLayout = (RelativeLayout) getActivity().findViewById(R.id.profile_tab_layout); 

     //Hooking up our custom array adaptor 
     NotificationsArrayAdapter adapter = new NotificationsArrayAdapter(getActivity(), values); 
     setListAdapter(adapter); 
    } 

    @Override 
    public void onListItemClick(ListView l, View v, int position, long id) { 
     // TODO implement some logic 
     String item = (String) getListAdapter().getItem(position); 
     Toast.makeText(getActivity(), item + " selected", Toast.LENGTH_LONG).show(); 
    } 
} 

Моя проблема заключается в следующем: Я получаю это странное пространство внизу, когда заголовок скрыт (при прокрутке объекта ObservableListView).

enter image description here

Как я могу избавиться от него и сделать мою вкладку Макет заполняет экран, когда расположение заголовка скрыта? Я пробовал все: от попыток изменить размер ViewPager, вкладки в listView, но ничего не работает. Заранее спасибо.

ответ

1

Попробуйте использовать linearlayout с ориентацией по вертикали в файле fragment_profile.xml. Замените все relativelayout на linearlayout

+0

Макет_имя viewPager и listView уже установлены в match_parent. Все еще не работает. Вероятно, я должен добавить код фрагмента вкладки здесь. – TwiZtor

+0

приложите полный код фрагмента.xml –

+0

Пожалуйста, проверьте обновленный вопрос. Заранее спасибо. =) – TwiZtor

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

  • Нет связанных вопросов^_^