1

編集:さらに調査した結果、これはViewPager. 問題は、XML で可視性属性を設定しViewGroup、実行時に変更しようとすることです。元の質問はそのままにしておきます。詳細については、以下の私の回答を参照してください。

ViewPagerとカスタムPagerIndicatorクラスのレイアウトがあります。の 0 ページ目でViewPager、インジケーターを にしたいと思いますView.GONE。他のページでは、私はそれが欲しいView.VISIBLE. 中に呼び出される私のコードは次のonCreateとおりです。

void setupPager() {
    mPager.setAdapter(new TutorialPagerAdapter());
    mPager.setOnPageChangeListener(new OnPageChangeListener() {
        @Override
        public void onPageSelected(int currentPage) {
            Log.d(TAG, String.valueOf(currentPage));
            if (currentPage == 0) {
                mPagerIndicator.setVisibility(View.GONE);
            } else {
                mPagerIndicator.setVisibility(View.VISIBLE);
            }
            mPagerIndicator.setCurrentPage(currentPage);

        }

        @Override
        public void onPageScrolled(int arg0, float arg1, int arg2) {
        }

        @Override
        public void onPageScrollStateChanged(int arg0) {
        }
    });
}

はXML レイアウトでmPagerIndicator設定されます。android:visibility="invisible"ページ間をスクロールすると、コールバックが呼び出され、ページ番号が正しいことがわかります。ただし、ポケットベルは表示されません。

ここが奇妙なところです。SDK に付属の Android Hierarchy Viewer をロードしました。エミュレーター POOF からビュー階層をロードすると、インジケーターが表示されました。また、物理デバイスでは問題ではないようです。(編集:いくつかのテストの後、2.3 の問題であると思われます。これは、より高いバージョンのデバイスでは発生しませんが、2.3.6 の電話では発生するためです。)

なぜこれが起こっているのですか?これはエミュレータの癖にすぎないと考えるのが妥当ですか、それとも一部のデバイスでは動作しないのではないかと心配する必要がありますか? それを表示させるためのハックはありますか?ヒエラルキー ビューアーは、それ自体を強制的に更新する可能性があることを何をしますか?

4

2 に答える 2

0

「物理デバイスでは問題ないようです」とはどういう意味ですか? インジケーターが正常に表示されているということですか、それともインジケーターが HierarchyViewer に表示されているということですか?

あなたのコードでは、すべてが問題ないように見えます。インジケーターが別のビュー (おそらく ViewPager) で覆われているように聞こえますが、問題なく存在するため、HierarchyViewer で確認できます。

View.VISIBLE上記のコードを削除して表示を切り替え、xml でPagerIndicator を設定してみてください。それでも表示されない場合は、問題があります。

于 2013-08-02T19:22:48.687 に答える
0

の可視性に関する Android 2.3.3+ の問題があるようですViewGroupsViewGroupXMLで withを設定するとandroid:visibility=X、すべてのサブビューの可視性が設定されるようです。ただし、実行時に可視性を変更しても、サブビューには適用されません。goneこのため、 orの可視性で開始すると、invisibile後で可視性の設定が失敗する原因になります。

setVisibility解決策は、カスタム ビューをオーバーライドして、すべてのサブビューにも可視性を設定することです。

@Override
public void setVisibility(int visibility) {
    super.setVisibility(visibility);
    for (ImageView image : mImages) {
        image.setVisibility(visibility);
    }
}

http://www.kittehface.com/2011/03/view-visibility-bug-on-android-233.htmlのおかげで、正しい方向に向けるために最初に非表示に設定されている場合、android setVisibility は表示されません。

于 2013-08-07T16:09:31.403 に答える