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 上,所以这是个问题。
我现在的问题是:
- 事件监听器喜欢'scroll'什么单位return? (像素或 dp)
因为我的
toolbarX = e.x
来自滚动事件
- 什么单位需要scrollTo(x,y)?????
这对我有用
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。
我正在使用 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 上,所以这是个问题。
我现在的问题是:
- 事件监听器喜欢'scroll'什么单位return? (像素或 dp)
因为我的
toolbarX = e.x
来自滚动事件 - 什么单位需要scrollTo(x,y)?????
这对我有用
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。