【问题标题】:Make HorizontalScrollView hover ViewPager/Fragments使 Horizo​​ntalScrollView 悬停 ViewPager/Fragments
【发布时间】:2014-10-08 15:00:40
【问题描述】:

有什么方法可以让 Horizo​​ntalScrollView (SlidingTabLayout) 悬停在 ViewPager 及其片段上,而不是线性显示它们?

<LinearLayout 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"
    android:orientation="vertical"
    tools:context="com.zerohora.app.fragments.ContentFragment">

    <com.zerohora.app.widgets.SlidingTabLayout
        android:id="@+id/sliding_tabs"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        />

    <android.support.v4.view.ViewPager
        android:id="@+id/viewpager"
        android:layout_width="match_parent"
        android:layout_height="0px"
        android:layout_weight="1"
        android:layout_gravity="top"
        />

</LinearLayout>

已经试过FrameLayout和RelativeLayout,还是不行。在此更改后,滑动停止工作。 也改变了他们的marginTop,但是ViewPager总是在ScrollView之上。

这里的想法是当用户在 ViewPager 片段中滚动列表时隐藏 Horizo​​ntalScrollView (SlidingTab)。

谢谢

【问题讨论】:

    标签: android layout android-fragments android-viewpager android-tabs


    【解决方案1】:

    我找到了解决方法:

    首先通过调用 brinToFront() 方法将您希望在其他人面前的视图显示出来:

    mSlidingTabLayout = (SlidingTabLayout) view.findViewById(R.id.sliding_tabs);
    mSlidingTabLayout.bringToFront();
    

    然后您可以将视图放置在您想要的任何位置。如果您想将它放在顶部但紧跟在操作栏之后,您可以执行以下操作:

                // Get viewport's heigth
                WindowManager wm = (WindowManager) getActivity().getSystemService(Context.WINDOW_SERVICE);
                Display display = wm.getDefaultDisplay();
                Point size = new Point();
                display.getSize(size);
                int viewportHeight = size.y;
    
                // Get ActionBar's height
                TypedValue tv = new TypedValue();
                int actionBarHeight = 0;
                if (getActivity().getTheme().resolveAttribute(android.R.attr.actionBarSize, tv, true)) {
                    actionBarHeight = TypedValue.complexToDimensionPixelSize(tv.data, getResources().getDisplayMetrics());
                }
    
                // Get status bar height
                int statusBarHeight = 0;
                int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");
                if (resourceId > 0) {
                    statusBarHeight = getResources().getDimensionPixelSize(resourceId);
                }
    
                // Set tabs position
                LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT,
                        RelativeLayout.LayoutParams.WRAP_CONTENT);
                params.topMargin = -(viewportHeight) + actionBarHeight + statusBarHeight;
                mSlidingTabLayout.setLayoutParams(params);
    
                //Redraw display
                mSlidingTabLayout.invalidate();
                mViewPager.invalidate();
    

    【讨论】:

      猜你喜欢
      • 2011-10-18
      • 1970-01-01
      • 2015-09-02
      • 2018-03-31
      • 1970-01-01
      • 1970-01-01
      • 2012-08-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多