Android ViewPager не отображает все мои элементы макета - PullRequest
0 голосов
/ 05 ноября 2011

Я использую ViewPager, который раздувает макет.ViewPager работает, я могу смахивать туда-сюда, но раздуваемые макеты загружаются только частично.В моем примере отображается только мой RelativeLayout и ничего больше.Я могу подтвердить, что мой макет работает, потому что, когда я не использую ViewPager, все отображается хорошо.

Вот макет, который я раздуваю:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical" android:background="#FFFFFF">
    <RelativeLayout
        android:id="@+id/header"
        android:layout_width="fill_parent"
        android:layout_height="match_parent"
        android:layout_weight="0"
        android:background="#000000" >

        <ImageView
            android:id="@+id/batteryImageView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_centerVertical="true"
            android:layout_marginLeft="5dp"
            android:src="@drawable/battery" />

        <ImageView
            android:id="@+id/exit_button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_centerVertical="true"
            android:src="@drawable/exit_button" />

        <TextView
            android:id="@+id/textView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:layout_marginLeft="5dp"
            android:layout_toRightOf="@+id/batteryImageView"
            android:text="76%" />
    </RelativeLayout>



    <FrameLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/score"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:orientation="vertical"
        android:padding="3dp" >

        <View
            android:id="@+id/dynamic_background_view"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical" >

            <LinearLayout
                android:id="@+id/topHorizontalLinearLayout"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content" >

                <LinearLayout
                    android:id="@+id/prominentDisplayLinearLayout"
                    android:layout_width="fill_parent"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:orientation="vertical" >

                    <TextView
                        android:id="@+id/scoreLabelTextView"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:gravity="center"
                        android:text="Blast Factor"
                        android:textSize="30dp" />

                    <TextView
                        android:id="@+id/scoreTextView"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:layout_marginTop="-35dp"
                        android:gravity="top|center_horizontal"
                        android:text="100"
                        android:textSize="125dp" />
                </LinearLayout>

                <LinearLayout
                    android:id="@+id/prominentVerticalLinearLayout"
                    android:layout_width="fill_parent"
                    android:layout_height="wrap_content"
                    android:layout_marginLeft="10dp"
                    android:layout_marginRight="5dp"
                    android:layout_marginTop="10dp"
                    android:layout_weight="2"
                    android:orientation="vertical" >

                    <LinearLayout
                        android:id="@+id/averageLinearLayout"
                        android:layout_width="fill_parent"
                        android:layout_height="wrap_content"
                        android:orientation="vertical" >

                        <TextView
                            android:id="@+id/averageLabel"
                            android:layout_width="fill_parent"
                            android:layout_height="wrap_content"
                            android:layout_gravity="center"
                            android:background="#55000000"
                            android:gravity="center"
                            android:text="Average"
                            android:textSize="13dp" />

                        <TextView
                            android:id="@+id/averageScore"
                            android:layout_width="fill_parent"
                            android:layout_height="wrap_content"
                            android:layout_gravity="center"
                            android:gravity="center"
                            android:text="100"
                            android:textSize="50dp" />
                    </LinearLayout>

                    <LinearLayout
                        android:id="@+id/lastLinearLayout"
                        android:layout_width="fill_parent"
                        android:layout_height="match_parent"
                        android:orientation="vertical" >

                        <TextView
                            android:id="@+id/lastLabel"
                            android:layout_width="fill_parent"
                            android:layout_height="wrap_content"
                            android:background="#55000000"
                            android:gravity="center"
                            android:text="Last"
                            android:textSize="13dp" />

                        <TextView
                            android:id="@+id/lastScore"
                            android:layout_width="fill_parent"
                            android:layout_height="wrap_content"
                            android:layout_gravity="center"
                            android:gravity="center"
                            android:text="100"
                            android:textSize="50dp" />
                    </LinearLayout>
                </LinearLayout>
            </LinearLayout>

            <LinearLayout
                android:id="@+id/demotedDisplayLinearLayout"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="horizontal" >

                <FrameLayout
                    android:id="@+id/leftPanelFrame"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginLeft="2dp"
                    android:layout_marginRight="2dp" >

                    <LinearLayout
                        style="@style/MotionMetrics.ScorePanel"
                        android:layout_width="match_parent"
                        android:layout_height="match_parent"
                        android:background="#55000000" >

                        <ImageView
                            android:id="@+id/leftPanelImageView"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:src="@drawable/swingspeed" />

                        <TextView
                            android:id="@+id/leftPanelLabelTextView"
                            style="@style/MotionMetrics.ScoreHeader"
                            android:text="Swing Speed" />

                        <TextView
                            android:id="@+id/leftPanelTextView"
                            style="@style/MotionMetrics.ScoreValue"
                            android:layout_width="match_parent"
                            android:text="92" />
                    </LinearLayout>

                    <ImageView
                        android:id="@+id/leftPanelSelectionArrow"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:padding="5dp"
                        android:src="@drawable/select_arrow" />
                </FrameLayout>

                <FrameLayout
                    android:id="@+id/middlePanelFrame"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:layout_marginRight="2dp"
                    android:layout_weight="1"
                    android:background="#55000000" >

                    <LinearLayout
                        style="@style/MotionMetrics.ScorePanel"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content" >

                        <ImageView
                            android:id="@+id/middlePanelImageView"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:src="@drawable/ballspeed" />

                        <TextView
                            android:id="@+id/middlePanelLabelTextView"
                            style="@style/MotionMetrics.ScoreHeader"
                            android:text="Ball Speed" />

                        <LinearLayout
                            android:layout_width="match_parent"
                            android:layout_height="wrap_content"
                            android:gravity="top|center_horizontal"
                            android:orientation="horizontal" >

                            <TextView
                                android:id="@+id/middlePanelTextView"
                                style="@style/MotionMetrics.ScoreValue"
                                android:text="1.3" />
                        </LinearLayout>
                    </LinearLayout>

                    <View
                        android:layout_width="35dp"
                        android:layout_height="match_parent"
                        android:background="@drawable/score_border" />

                    <ImageView
                        android:id="@+id/middlePanelSelectionArrow"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:padding="5dp"
                        android:src="@drawable/select_arrow" />
                </FrameLayout>

                <FrameLayout
                    android:id="@+id/rightPanelFrame"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:layout_marginRight="2dp"
                    android:layout_weight="1"
                    android:background="#55000000" >

                    <ImageView
                        android:id="@+id/rightPanelSelectionArrow"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:padding="5dp"
                        android:src="@drawable/select_arrow" />

                    <LinearLayout
                        style="@style/MotionMetrics.ScorePanel"
                        android:layout_width="match_parent"
                        android:layout_height="match_parent" >

                        <ImageView
                            android:id="@+id/rightPanelImageView"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:src="@drawable/distance" />

                        <TextView
                            android:id="@+id/rightPanelLabelTextView"
                            style="@style/MotionMetrics.ScoreHeader"
                            android:text="Distance" />

                        <LinearLayout
                            android:layout_width="match_parent"
                            android:layout_height="wrap_content"
                            android:gravity="top|center_horizontal"
                            android:orientation="horizontal" >

                            <TextView
                                android:id="@+id/rightPanelTextView"
                                style="@style/MotionMetrics.ScoreValue"
                                android:text="7.6" />
                        </LinearLayout>
                    </LinearLayout>

                    <View
                        android:id="@+id/view1"
                        android:layout_width="35dp"
                        android:layout_height="match_parent"
                        android:background="@drawable/score_border" />
                </FrameLayout>
            </LinearLayout>
        </LinearLayout>
    </FrameLayout>

    <LinearLayout
        android:id="@+id/buttonBar"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="0" >

        <Button
            android:id="@+id/blastButton"
            android:layout_width="wrap_content"
            android:layout_height="35dp"
            android:text="Blast" android:layout_weight="1"/>

        <Button
            android:id="@+id/angleButton"
            android:layout_width="wrap_content"
            android:layout_height="35dp"
            android:text="Angle" android:layout_weight="1"/>

        <Button
            android:id="@+id/timingButton"
            android:layout_width="wrap_content"
            android:layout_height="35dp"
            android:text="Timing" android:layout_weight="1"/>
    </LinearLayout>

<ImageView
    android:id="@+id/tabBarImageView"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:src="@drawable/tabbar"/>

</LinearLayout>

Вот основной макеткоторый имеет ViewPager и будет раздувать вышеупомянутый макет:

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

     <android.support.v4.view.ViewPager
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:id="@+id/scorePager"/>

</LinearLayout>

Вот мой код ViewPagerAdapter:

private class ScorePagerAdapter extends PagerAdapter{


            @Override
            public int getCount() {
                return NUM_PAGES;
            }

            /**
             * Create the page for the given position.  The adapter is responsible
             * for adding the view to the container given here, although it only
             * must ensure this is done by the time it returns from
             * {@link #finishUpdate()}.
             *
             * @param container The containing View in which the page will be shown.
             * @param position The page position to be instantiated.
             * @return Returns an Object representing the new page.  This does not
             * need to be a View, but can be some other container of the page.
             */
            @Override
            public Object instantiateItem(View collection, int position) {
                /*TextView tv = new TextView(cxt);
                tv.setText("Bonjour PAUG " + position);
                tv.setTextColor(Color.GREEN);
                tv.setTextSize(30);

                ((ViewPager) collection).addView(tv,0);

                return tv;*/

                LayoutInflater inflater = (LayoutInflater)cxt.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
                View view = inflater.inflate(R.layout.score, null);
                updateDisplay(score, position, view);

                ((ViewPager) collection).addView(view,0);

                return view;
            }

            /**
             * Remove a page for the given position.  The adapter is responsible
             * for removing the view from its container, although it only must ensure
             * this is done by the time it returns from {@link #finishUpdate()}.
             *
             * @param container The containing View from which the page will be removed.
             * @param position The page position to be removed.
             * @param object The same object that was returned by
             * {@link #instantiateItem(View, int)}.
             */
            @Override
            public void destroyItem(View collection, int position, Object view) {
                //((ViewPager) collection).removeView((TextView) view);
                ((ViewPager) collection).removeView((View) view);
            }



            @Override
            public boolean isViewFromObject(View view, Object object) {
                //return view==((TextView)object);
                return view==((View)object);
            }


            /**
             * Called when the a change in the shown pages has been completed.  At this
             * point you must ensure that all of the pages have actually been added or
             * removed from the container as appropriate.
             * @param container The containing View which is displaying this adapter's
             * page views.
             */
            @Override
            public void finishUpdate(View arg0) {}


            @Override
            public void restoreState(Parcelable arg0, ClassLoader arg1) {}

            @Override
            public Parcelable saveState() {
                return null;
            }

            @Override
            public void startUpdate(View arg0) {}

        }

И, наконец, updateDisplay () содержит все мои элементы пользовательского интерфейса, которые я хочу показатьup:

private void updateDisplay(final BlastScore score, int viewId, View layout) {
        final TextView scoreTextView = (TextView) layout.findViewById(R.id.scoreTextView);
        final TextView scoreLabelTextView = (TextView) layout.findViewById(R.id.scoreLabelTextView);

        int blastScore = score.getBlastScore();

        // animateScore();

        // Swing Speed UI
        final TextView leftPanelTextView = (TextView) layout.findViewById(R.id.leftPanelTextView);
        final TextView leftPanelLabelTextView = (TextView) layout.findViewById(R.id.leftPanelLabelTextView);
        final ImageView leftPanelImageView = (ImageView) layout.findViewById(R.id.leftPanelImageView);
        final ImageView leftPanelSelectionArrow = (ImageView) layout.findViewById(R.id.leftPanelSelectionArrow);


        // Ball Speed UI
        final TextView middlePanelTextView = (TextView) layout.findViewById(R.id.middlePanelTextView);
        final TextView middlePanelLabelTextView = (TextView) layout.findViewById(R.id.middlePanelLabelTextView);
        final ImageView middlePanelImageView = (ImageView) layout.findViewById(R.id.middlePanelImageView);
        final ImageView middlePanelSelectionArrow = (ImageView) layout.findViewById(R.id.middlePanelSelectionArrow);

1 Ответ

1 голос
/ 06 ноября 2011

Сделайте layout_weight вашего RelativeLayout (заголовка) 1 и установите его 0 для вашего FrameLayout (балла).

Вес 0 означает, что он гарантированно получит то, о чем он просит, и так как его рост равенmatch_parent, RelativeLayout получает все.

...