3

PagerView が TitleStrip と重ならないように、約 1 週間試してみました。

考えられることはすべて試しましたが、同じ質問のように見える StackOverflow の質問の 1 つに、該当しない回答がありました。

PagerTitleStrip と TextView の両方が 0,0 (左、上) から始まるようです

どんな助けでも大歓迎です。ここでは XML (Layout.xml を含む) を使用できないため、すべてプログラムで行うことに注意してください。

これが私の問題の完全な実例です:

package com.example.projname;

import android.app.Activity;
import android.os.Bundle;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.PagerTabStrip;
import android.support.v4.view.ViewPager;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.widget.TextView;

public class MainActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        MyPagerAdapter myPagerAdapter = new MyPagerAdapter();
        PagerTabStrip myPagerTabStrip = new PagerTabStrip(this);
        myPagerTabStrip.setGravity(Gravity.TOP);
        ViewPager viewPager = new ViewPager(this);
        viewPager.addView(myPagerTabStrip, LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
        viewPager.setAdapter(myPagerAdapter);
        setContentView(viewPager);
    }

    class MyPagerAdapter extends PagerAdapter {
        public final String[] Titles = {
            "Title One",
            "Title Two",
            "Title Three",
            "Title Four",
            "Title Five"
        };

        @Override
        public int getCount() {
            return Titles.length;
        }

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

        @Override
        public CharSequence getPageTitle(int position) {
            return Titles[position];
        }

        @Override
        public Object instantiateItem(ViewGroup container, int position) {
            TextView textView = new TextView(getApplicationContext());
            String myString = new String("Page " + (position + 1) + "\r\n");
            textView.setText(myString + myString + myString + myString + myString + myString);
            container.addView(textView);
            return textView;
        }

        @Override
        public void destroyItem(ViewGroup container, int position, Object object) {
            container.removeView((View) object);
        }
    }
}

Edit1: 問題のスクリーンショットを追加: テキスト Page1 が本来よりもはるかに高く表示されている

Edit2:質問を回答で更新する(将来誰かがこれを試みる場合に備えて)

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    LayoutParams layoutParams = new LayoutParams();
    layoutParams.height = LayoutParams.WRAP_CONTENT;
    layoutParams.width = LayoutParams.MATCH_PARENT;
    layoutParams.gravity = Gravity.TOP;
    PagerTabStrip myPagerTabStrip = new PagerTabStrip(this);
    MyPagerAdapter myPagerAdapter = new MyPagerAdapter();       
    ViewPager viewPager = new ViewPager(this);
    viewPager.addView(myPagerTabStrip, layoutParams);
    viewPager.setAdapter(myPagerAdapter);
    setContentView(viewPager);
}
4

1 に答える 1

2

XMLは使用できないことに注意してください

なんで?

どんな助けでもいただければ幸いです。

addView()オブジェクトをパラメータとして受け取るバージョンを試してLayoutParams、のインスタンスを使用してくださいViewPager.LayoutParams。また、の代わりにgravity上のフィールドを使用してください。ViewPager.LayoutParamssetGravity()

それでも問題が解決しない場合は、一時的にViewPagerandPagerTitleStripをXMLで設定し(たとえば、別のプロジェクトで)、階層ビューで結果を調べて、XMLアプローチの構成がどのように重要であるかを確認し、複製を試みることができます。

于 2012-10-14T11:01:58.157 に答える