Android TabHost Center активная вкладка - PullRequest
2 голосов
/ 26 марта 2012

Можно ли изменить вкладки Android, чтобы при нажатии на одну из них она доходила до центра TabHost.Видны только 3 вкладки, независимо от того, сколько их.Как в Android 4.0 Google Music App!Если это так, как бы вы это сделали?

Спасибо!

1 Ответ

6 голосов
/ 01 апреля 2012

Я нашел ответ сам.
Если кому-то еще это нужно, он должен это сделать:

    final HorizontalScrollView mHorizontalScrollView;
    float scale = getResources().getDisplayMetrics().density;
    final double tabWidth = (int) (150 * scale + 0.5f);

    for (int i = 0; i < tabHost.getTabWidget().getTabCount(); i++) {
        tabHost.getTabWidget().getChildTabViewAt(i).getLayoutParams().width = (int) tabWidth;
    }

    final double screenWidth = getWindowManager().getDefaultDisplay()
            .getWidth();
    mHorizontalScrollView = (HorizontalScrollView) findViewById(R.id.hscrollview);

    tabHost.setOnTabChangedListener(new OnTabChangeListener() {

        @Override
        public void onTabChanged(String tabId) {
            int nrOfShownCompleteTabs = ((int) (Math.floor(screenWidth
                    / tabWidth) - 1) / 2) * 2;
            int remainingSpace = (int) ((screenWidth - tabWidth - (tabWidth * nrOfShownCompleteTabs)) / 2);

            int a = (int) (tabHost.getCurrentTab() * tabWidth);
            int b = (int) ((int) (nrOfShownCompleteTabs / 2) * tabWidth);
            int offset = (a - b) - remainingSpace;

            mHorizontalScrollView.scrollTo(offset, 0);
        }
    });
...