用片段动态设置ViewPager的高度

四蛇

我正在尝试设置ViewPager的高度动态,使每个FragmentViewPager都有自己的高度。我的代码基于czaku在此处找到的解决方案:动态设置ViewPager高度

activity_artwork_page.xml

<?xml version="1.0" encoding="utf-8"?>
<ScrollView 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:fillViewport="true" >

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/activity_artwork_page"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        tools:context="com.example.andrea.chatbeacon.ArtworkPageActivity">

        <android.support.v4.view.ViewPager
            xmlns:android="http://schemas.android.com/apk/res/android"
            android:id="@+id/pager"
            android:layout_width="match_parent"
            android:layout_height="4000dp" />

        <fragment
            class="com.example.andrea.chatbeacon.ChatFragment"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/chat_fragment"
            android:layout_marginTop="40dp"
            tools:layout="@layout/fragment_chat" />
    </LinearLayout>

</ScrollView>

ArtworkPageActivity.java

public class ArtworkPageActivity extends AppCompatActivity {

    private ViewPager mPager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_artwork_page);

        mPager = (ViewPager) findViewById(R.id.pager);
        PagerAdapter mPagerAdapter = new ScreenSlidePagerAdapter(getSupportFragmentManager());
        mPager.setAdapter(mPagerAdapter);
    }

    @Override
    protected void onResume() {
        super.onResume();

        ViewTreeObserver viewTreeObserver = mPager.getViewTreeObserver();
        viewTreeObserver
                .addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {

                    @Override
                    public void onGlobalLayout() {

                        LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
                                LinearLayout.LayoutParams.WRAP_CONTENT,
                                LinearLayout.LayoutParams.WRAP_CONTENT);

                        LinearLayout artwork_slide_layout = (LinearLayout) findViewById(R.id.artwork_slide_layout);
                        int viewPagerWidth = mPager.getWidth();
                        int viewPagerHeight = artwork_slide_layout.getHeight();

                        layoutParams.width = viewPagerWidth;
                        layoutParams.height = viewPagerHeight;

                        mPager.setLayoutParams(layoutParams);
                        mPager.getViewTreeObserver().removeOnGlobalLayoutListener(this);
                    }
                });
    }

    @Override
    public void onBackPressed() {
        if (mPager.getCurrentItem() == 0) {
            // If the user is currently looking at the first step, allow the system to handle the
            // Back button. This calls finish() on this activity and pops the back stack
            super.onBackPressed();
        } else {
            // Otherwise, select the previous step
            mPager.setCurrentItem(mPager.getCurrentItem() - 1);
        }
    }

    private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter {

        public ScreenSlidePagerAdapter(FragmentManager fm) {
            super(fm);
        }

        @Override
        public Fragment getItem(int position) {
            Fragment fragment = new ArtworkSlideFragment();
            Bundle args = new Bundle();
            args.putInt("position", position);
            fragment.setArguments(args);
            return fragment;
        }

        @Override
        public int getCount() {
            int id = getIntent().getIntExtra("id", 0);
            return Variables.artworks[id].getTitles().length;
        }
    }
}

fragment_artwork_slide.xml

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/artwork_slide_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".ArtworkSlideFragment">

    <ImageView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/artwork_image"
        android:contentDescription="@string/artwork_image_description" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/artwork_title"
        android:textColor="@android:color/black"
        android:textSize="18sp"
        android:layout_marginTop="@dimen/activity_vertical_margin" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/artwork_text"
        android:textColor="@android:color/black"
        android:textSize="15sp"
        android:layout_marginTop="10dp" />

</LinearLayout>

ArtworkSlideFragment.java

public class ArtworkSlideFragment extends Fragment {

    public ArtworkSlideFragment() {
        // Required empty public constructor
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        Bundle args = getArguments();
        int id = getActivity().getIntent().getIntExtra("id", 0);
        int position = args.getInt("position", 0);
        View view = inflater.inflate(R.layout.fragment_artwork_slide, container, false);
        ImageView image = (ImageView) view.findViewById(R.id.artwork_image);
        TextView title = (TextView) view.findViewById(R.id.artwork_title);
        TextView text = (TextView) view.findViewById(R.id.artwork_text);

        Glide.with(getActivity().getApplicationContext()).load(Variables.artworks[id].getImages()[position]).into(image);
        title.setText(Variables.artworks[id].getTitles()[position]);
        text.setText(Variables.artworks[id].getTexts()[position]);

        return view;
    }
}

我试图设定

viewPagerHeight = artwork_slide_layout.getHeight();

但似乎不起作用。如何设置viewPagerHeight

四蛇

我在以下位置找到了vabhishek的可行解决方案:

https://github.com/vabhishek/WrapContentViewPagerDemo

即使没有vabhishek定义的CustomScrollView,这也对我有用。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在ViewPager Android中设置片段的动态高度包含RecycleView?

来自分类Dev

如何从片段中获取高度并设置Viewpager的高度?

来自分类Dev

用Javascript动态设置元素的高度

来自分类Dev

具有动态高度的Viewpager无法正常工作(始终使用第一个片段的高度)

来自分类Dev

动态设置片段

来自分类Dev

垂直Viewpager具有不同的片段高度?

来自分类Dev

动态设置tableHeaderView高度

来自分类Dev

动态设置uitableviewcell的高度

来自分类Dev

将viewpager的高度设置为内容的高度

来自分类Dev

如何在片段活动中设置“动态高度到列表视图”?

来自分类Dev

如何动态刷新viewpager中的片段?

来自分类Dev

在ViewPager中动态更改片段内容

来自分类Dev

ViewPager中的动态内部片段重叠

来自分类Dev

Android ViewPager +具有动态ListViews的片段

来自分类Dev

ViewPager,动态添加片段不起作用

来自分类Dev

具有动态高度的Android ViewPager

来自分类Dev

如何为Viewpager片段设置标签?

来自分类Dev

如何在片段内设置ViewPager

来自分类Dev

用FragmentPagerAdapter作为片段本身的ViewPager?

来自分类Dev

给底部的Tabbar设置动态高度?

来自分类Dev

如何动态设置元素的高度?

来自分类Dev

未设置桌子的动态高度

来自分类Dev

如何动态设置UITableView的高度?

来自分类Dev

如何设置动态高度jQuery

来自分类Dev

给底部的Tabbar设置动态高度?

来自分类Dev

在android中的Scrollview中设置Viewpager高度

来自分类Dev

ViewPager和动态片段:重新实例化可提供NPE

来自分类Dev

在onCreateView()片段中设置动态布局

来自分类Dev

在onCreateView()片段中设置动态布局

Related 相关文章

热门标签

归档