Android 如何设置所选选项卡必须在中间

Android 如何设置所选选项卡必须在中间,android,scrollview,android-tabhost,tabwidget,horizontalscrollview,Android,Scrollview,Android Tabhost,Tabwidget,Horizontalscrollview,我是Android新手,在我的项目中我有一个新的需求 我有六个选项卡,但在屏幕上只显示三个选项卡,其余的选项卡我使用ScLoVIEW。这里所选的选项卡项目必须在中间,首先,当我进入屏幕时,显示中间项目是活动的(即选择)。 这很好,但是当我滚动到剩余的选项卡时,如何将这个中间项设置为中间项呢 谁能给我一些建议来解决问题。我认为tabhost没有这种行为。据我所知,tabhost可以在没有tab控制器的情况下工作。对于您的情况,画廊将取代Tab控制器,正如您所知道的,画廊中的选定项目总是停留在中间。

我是Android新手,在我的项目中我有一个新的需求

我有六个选项卡,但在屏幕上只显示三个选项卡,其余的选项卡我使用ScLoVIEW。这里所选的选项卡项目必须在中间,首先,当我进入屏幕时,显示中间项目是活动的(即选择)。 这很好,但是当我滚动到剩余的选项卡时,如何将这个中间项设置为中间项呢


谁能给我一些建议来解决问题。

我认为tabhost没有这种行为。据我所知,tabhost可以在没有tab控制器的情况下工作。对于您的情况,画廊将取代Tab控制器,正如您所知道的,画廊中的选定项目总是停留在中间。 然后在gallery的事件侦听器中,编写一些代码来控制在tabhost中显示哪个选项卡。

签出:)

public void centerTabItem(int位置){
tabHost.setCurrentTab(位置);
final TabWidget TabWidget=tabHost.getTabWidget();
final int screenWidth=getWindowManager().getDefaultDisplay().getWidth();
final int leftX=tabWidget.getChildAt(位置).getLeft();
int newX=0;
newX=leftX+(tabWidget.getChildAt(position.getWidth()/2)-(screenWidth/2);
if(newX<0){
newX=0;
}
scrollTo(newX,0);
}

您是否考虑过使用检测滚动的侦听器,然后在回调方法中手动设置selectedTab?谢谢您的建议,但我没有使用以下滚动侦听器(我在xml中声明了Horizaontalscrollview)TestHorizontalScrollView sView=(TestHorizontalScrollView)findViewById(R.id.horizontalScrollView);公共类TestHorizontalScrollView扩展horizontalScrollView{public TestHorizontalScrollView(上下文){super(上下文);}@Override protected void onScrollChanged(int l,int t,int oldl,int oldt){super.onScrollChanged(l,t,oldl,oldt)}看看这里,我想你会发现一些有用的想法。这很有效。但是,当tabhost设置并初始化时,我如何才能第一次做到这一点。假设我想初始化tab主机,当前索引为5。设置后,你可以直接调用centerTabItem(5)
public void centerTabItem(int position) {
    tabHost.setCurrentTab(position);
    final TabWidget tabWidget = tabHost.getTabWidget();
    final int screenWidth = getWindowManager().getDefaultDisplay().getWidth();
    final int leftX = tabWidget.getChildAt(position).getLeft();
    int newX = 0;

    newX = leftX + (tabWidget.getChildAt(position).getWidth() / 2) - (screenWidth / 2);
    if (newX < 0) {
        newX = 0;
    }
    horizontalScrollView.scrollTo(newX, 0);
}