Android Tabris:使用滑动实现滚动组件的正确方法
我尝试将滚动复合垂直滚动与使用手势滑动的分页导航结合使用 我的应用程序在Android模拟器上运行良好。我尝试了Android 4.0.3、4.1.2、4.3,但我的手机遇到了问题 中兴通讯刀片III,安卓操作系统4.0.4。无论方向如何,刷卡都不起作用 安卓4.4的HTC Desire在横向滑动方面存在问题 我做错什么了吗 我从tab使用SwipeDemo入口点进行了测试Android Tabris:使用滑动实现滚动组件的正确方法,android,swipe,tabris,Android,Swipe,Tabris,我尝试将滚动复合垂直滚动与使用手势滑动的分页导航结合使用 我的应用程序在Android模拟器上运行良好。我尝试了Android 4.0.3、4.1.2、4.3,但我的手机遇到了问题 中兴通讯刀片III,安卓操作系统4.0.4。无论方向如何,刷卡都不起作用 安卓4.4的HTC Desire在横向滑动方面存在问题 我做错什么了吗 我从tab使用SwipeDemo入口点进行了测试 private void createSwipeWidget( Composite parent ) { fi
private void createSwipeWidget( Composite parent ) {
final ScrollingComposite scrollableParent = new ScrollingComposite( parent, SWT.V_SCROLL );
scrollableParent.setLayout( GridLayoutFactory.fillDefaults().create() );
scrollableParent.setLayoutData( GridDataFactory.fillDefaults()
.grab( true, true )
.align( SWT.FILL, SWT.FILL )
.create() );
Swipe result = new Swipe( scrollableParent, new DictionarySwipeItemProvider() );
GridDataFactory.fillDefaults()
.grab( true, true )
.align( SWT.FILL, SWT.FILL )
.applyTo( result.getControl() );
result.show( 0 );
}
也可以在com.eclipsesource.tabris.demos.swipe.DictionarySwipeItem中找到
我在createTitleLabel方法中给出了hint.hint SWT.DEFAULT,500,以便启用垂直滚动
提前谢谢
已编辑:添加全新的示例/片段
import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.jface.layout.GridLayoutFactory;
import org.eclipse.rap.rwt.application.EntryPoint;
import org.eclipse.rap.rwt.application.EntryPointFactory;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
import com.eclipsesource.tabris.ui.AbstractPage;
import com.eclipsesource.tabris.ui.PageConfiguration;
import com.eclipsesource.tabris.ui.PageData;
import com.eclipsesource.tabris.ui.TabrisUIEntryPoint;
import com.eclipsesource.tabris.ui.UIConfiguration;
import com.eclipsesource.tabris.widgets.ScrollingComposite;
import com.eclipsesource.tabris.widgets.swipe.Swipe;
import com.eclipsesource.tabris.widgets.swipe.SwipeContext;
import com.eclipsesource.tabris.widgets.swipe.SwipeItem;
import com.eclipsesource.tabris.widgets.swipe.SwipeItemProvider;
public class SwipeScrollSnippet implements EntryPointFactory {
@Override
public EntryPoint create() {
return new TabrisUIEntryPoint( createConfiguration() );
}
private UIConfiguration createConfiguration() {
UIConfiguration configuration = new UIConfiguration();
/*
* Page with Vertical scroll and swipe component. Swiping does not work at
* all.
*/
PageConfiguration page1 = new PageConfiguration( SwipePageWithScroll.class.getName(),
SwipePageWithScroll.class );
page1.setTitle( "Swipe page" );
page1.setTopLevel( true );
configuration.addPageConfiguration( page1 );
return configuration;
}
/**
* Page with scroll and swipe components
*/
public static class SwipePageWithScroll extends AbstractPage {
/**
* Creating content of a page with scrolling component and swipe object
*/
public void createContent( final Composite parent, final PageData data ) {
final ScrollingComposite scrollableParent = createScrollParent( parent );
createSwipe( scrollableParent );
}
protected ScrollingComposite createScrollParent( final Composite parent ) {
parent.setLayout( GridLayoutFactory.fillDefaults().numColumns( 1 ).spacing( 0, 0 ).create() );
final ScrollingComposite scrollableParent = new ScrollingComposite( parent, SWT.V_SCROLL );
scrollableParent.setLayoutData( GridDataFactory.fillDefaults().grab( true, true ).create() );
scrollableParent.setLayout( GridLayoutFactory.fillDefaults().create() );
scrollableParent.setBackground( getUI().getDisplay().getSystemColor( SWT.COLOR_GRAY ) );
return scrollableParent;
}
public Swipe createSwipe( Composite oParent ) {
Swipe result = new Swipe( oParent, new SimpleSwipeItemProvider() );
result.getControl().setBackground( getUI().getDisplay().getSystemColor( SWT.COLOR_YELLOW ) );
GridDataFactory.fillDefaults()
.grab( true, true )
.align( SWT.FILL, SWT.FILL )
.applyTo( result.getControl() );
return result;
}
}
/**
*
*/
public static class SimpleSwipeItemProvider implements SwipeItemProvider {
@Override
public SwipeItem getItem( int oIndex ) {
return new SimpleSwipeItem( oIndex );
}
@Override
public int getItemCount() {
return 3;
}
}
/**
*
*/
public static class SimpleSwipeItem implements SwipeItem {
private int index;
public SimpleSwipeItem( int oIndex ) {
super();
this.index = oIndex;
}
@Override
public Control load( Composite oParent ) {
Composite composite = new Composite( oParent, SWT.BORDER );
composite.setLayout( GridLayoutFactory.fillDefaults().create() );
Label label = new Label( composite, SWT.None );
label.setText( "Swipe item " + index );
label.setLayoutData( GridDataFactory.swtDefaults()
.grab( true, true )
.hint( SWT.DEFAULT, 500 )
.align( SWT.CENTER, SWT.CENTER )
.create() );
Label bottomLabel = new Label( composite, SWT.None );
bottomLabel.setText( "Try to swipe" );
bottomLabel.setLayoutData( GridDataFactory.swtDefaults()
.grab( true, true )
.align( SWT.CENTER, SWT.CENTER )
.create() );
return composite;
}
@Override
public boolean isPreloadable() {
return false;
}
@Override
public void deactivate( SwipeContext oContext ) {
}
@Override
public void activate( SwipeContext oContext ) {
}
}
}
对我来说,它确实可以与经过Android SDK和Genymotion测试的模拟器配合使用,但对于真实设备,我也注意到了一些问题: 摩托罗拉Razr i ist不起作用,HTC Desire和基于安卓4.4.2的Cynogenmod只能在纵向上起作用,而不能在横向上起作用。在华硕fonepad上,两种方向都很好 例如: 克隆存储库 使用1.2.1 Tabris目标平台 应用下面的更改 测试刷卡演示入口点/刷卡 ================================================================================== SwipeDemo.java ================================================================================== DictionarySwipeItem.java
这是一个有趣的观察结果。您能提供一个示例片段吗?我正在运行Tabris 1.2.1版本。我已经克隆了Tabris演示存储库,并从2013-12-23 09:49:46开始编写名为“Prepare 1.2.1 release”的提交。我换了两门课。com.eclipsesource.tabris.demos.entrypoints.swipedmo->上述方法已更改2。com.eclipsesource.tabris.demos.swipe.DictionarySwipeItem->高度提示被提供给标题标签,这样垂直滚动显示的滚动内容大小大于滚动组合大小。关于Android上的滚动组合,我们有一个已知问题。在某些设备上,在横向向下滚动然后旋转到纵向时,滚动停止工作。滚动的复合高度仍然停留在横向模式下,在纵向模式下显示底部的可用空间。不过,这与刷卡小部件没有直接关系。听起来熟悉吗?不,我还没有在我的设备上遇到过这个错误。我刚刚用你的卷轴演示试用过,一切都很好。我的问题是,在上面的例子中,刷卡很难或不可能完成。谢谢你的代码片段。我会调查的。很抱歉交叉评论。关于Android上的ScrolledComposite,我们有一个已知的问题。在某些设备上,在横向向下滚动然后旋转到纵向时,滚动停止工作。滚动的复合高度仍然停留在横向模式下,在纵向模式下显示底部的可用空间。不过,这与刷卡小部件没有直接关系。听起来熟悉吗?这似乎是另一个问题。与此同时,我也在iOS上尝试了一些东西。因为刷卡有向后的功能,我最终可能不得不为我的应用程序尝试另一种方法。
import com.eclipsesource.tabris.widgets.ScrollingComposite;
private void createSwipeWidget( Composite parent ) {
final ScrollingComposite scrollableParent = new ScrollingComposite( parent, SWT.V_SCROLL );
scrollableParent.setLayout( GridLayoutFactory.fillDefaults().create() );
scrollableParent.setLayoutData( GridDataFactory.fillDefaults()
.grab( true, true )
.align( SWT.FILL, SWT.FILL )
.create() );
Swipe result = new Swipe( scrollableParent, new DictionarySwipeItemProvider() );
GridDataFactory.fillDefaults()
.grab( true, true )
.align( SWT.FILL, SWT.FILL )
.applyTo( result.getControl() );
result.show( 0 );
}
private void createTitleLabel( Composite parent ) {
Label titleLabel = new Label( parent, SWT.WRAP );
GridDataFactory.fillDefaults()
.align( SWT.CENTER, SWT.TOP )
.grab( true, true )
.hint( SWT.DEFAULT, 500 )
.applyTo( titleLabel );
titleLabel.setForeground( parent.getDisplay().getSystemColor( SWT.COLOR_DARK_GRAY ) );
titleLabel.setText( "Lesson " + ( index + 1 ) );
titleLabel.setFont( new Font( parent.getDisplay(), new FontData( "Arial", 30, SWT.BOLD ) ) );
}