Android - ScrollView 上的 scrollTo() 无法正常工作

Android - scrollTo() on ScrollView doesn't work properly

我正在使用 Titanium SDK 5.1。2.GA。我在 Android 和 iOS 上有一个类似 TabGroup 的栏。当视图中不完全可见时,我将移动滚动,然后单击该选项卡。

在 iOS 上运行完美,但在 Android 上运行不正常。

这是我移动滚动视图的代码:

if((view.rect.x + view.rect.width) > (toolbarX + $.toolbar.rect.width)){
    $.toolbar.scrollTo(((view.rect.x + view.rect.width) - $.toolbar.rect.width) + 10, 0);
}else if(view.rect.x < toolbarX){
    $.toolbar.scrollTo(view.rect.x - 10, 0);
}

$.toolbar -> ScrollView

查看 -> 选项卡

这张照片解释了我的问题:

我在 Internet 上看到了这个 JIRA 票证 https://jira.appcelerator.org/browse/TIMOB-17954

这会是问题吗??

编辑

此问题是由 Appcelerator 上的新单位系统引起的。

我的 tiapp.xml

上有这条线
<property name="ti.ui.defaultunit" type="string">dp</property>

但是 Titanium 上的其他函数 return 它们的值在 px 上,所以这是个问题。

我现在的问题是:

这对我有用

if (OS_ANDROID) {
    $.tabbar.scrollTo(Util.DPUnitsToPixels(x), 0);
} else {
    $.tabbar.scrollTo(x, 0);    
}   

on android 将 dp 转换为像素

解决方案:

if(Alloy.Globals.isAndroid){
            var measure = require('alloy/measurement');

            //Vemos si tenemos que mover la toolbar
            if((view.rect.x + view.rect.width) > (toolbarX + $.toolbar.rect.width)){
                $.toolbar.scrollTo(((measure.dpToPX(view.rect.x) + measure.dpToPX(view.rect.width)) - measure.dpToPX($.toolbar.rect.width)) + 10, 0);
            }else if(view.rect.x < toolbarX){
                $.toolbar.scrollTo(measure.dpToPX(view.rect.x) - 10, 0);
            }
        }else{
            //Vemos si tenemos que mover la toolbar
            if((view.rect.x + view.rect.width) > (toolbarX + $.toolbar.rect.width)){
                $.toolbar.scrollTo(((view.rect.x + view.rect.width) - $.toolbar.rect.width) + 10, 0);
            }else if(view.rect.x < toolbarX){
                $.toolbar.scrollTo(view.rect.x - 10, 0);
            }
        }
    }

$.toolbar.addEventListener('scroll', function(e){

    Ti.API.info("-- toolbarX: " + e.x + " / " + Alloy.Globals.measure.pxToDP(e.x));

    if(Alloy.Globals.isAndroid){
        toolbarX = Alloy.Globals.measure.pxToDP(e.x);
    }else{
        toolbarX = e.x;
    }
});

这个问题是新问题,因为:

<property name="ti.ui.defaultunit" type="string">dp</property>

现在,您必须猜测必须以什么单位(px 或 dp)传递 Android 上的值,因为某些函数 return px 需要 px,而其他函数需要 dp。