我正在编写一些单元测试,由于这个特定应用程序的性质,重要的是我尽可能地提高UI
链条.所以,我想要做的是以编程方式触发按钮按下,就像用户按下按钮一样GUI
.
(是的,是的 - 我可以调用IBAction
选择器,但是,再次,这个特定的应用程序的性质使我很重要的是我伪造实际的按钮按下,这样就IBAction
可以从按钮调用它本身.)
这样做的首选方法是什么?
好的,所以我UILabel
在界面构建器中创建了一些显示"tap to begin"的默认文本.
当用户点击UILabel
我想要它触发IBAction方法时:
-(IBAction)next;
它更新标签上的文字以说出新的东西.
如果这允许我简单地将连接从我的方法拖到我的标签然后选择内部触摸,就像按钮一样,那将是非常方便的.但是,唉,没有雪茄.
所以无论如何,我想我的问题是,我是否必须继承UILabel
才能使其工作?或者是否有某种方法可以在标签上拖动按钮,但使其为0%不透明.或者是否有一个我想念的更简单的解决方案?
在我的应用程序中,我需要处理移动和单击事件.
单击是一个ACTION_DOWN操作的序列,几个ACTION_MOVE操作和一个ACTION_UP操作.理论上,如果您获得ACTION_DOWN事件然后获得ACTION_UP事件 - 这意味着用户刚刚单击了您的视图.
但实际上,这个序列在某些设备上不起作用.在我的三星Galaxy Gio上,只需单击我的视图:ACTION_DOWN,几次ACTION_MOVE,然后ACTION_UP即可获得此类序列.即我使用ACTION_MOVE动作代码获得了一些无法预料的OnTouchEvent激活.我从未(或几乎从不)获得序列ACTION_DOWN - > ACTION_UP.
我也不能使用OnClickListener,因为它没有给出点击的位置.那么如何检测点击事件并将其与移动区分开来呢?
在使用onTouchEvent和onTouch进行了多次实验后,我发现onTouch可以在任何地方工作(无论是在活动中还是在视图中),只要您声明了接口并将Listener放在正确的位置即可!另一方面,onTouchEvent仅适用于View!我的假设是否正确?这是真正的区别吗?
v. 23.2
引入了设计支持库BottomSheetBehavior
,它允许协调员的子节点作为底部工作表(可从屏幕底部拖动的视图).
我想做的是作为底层视图,具有以下视图(典型的协调器+折叠的东西):
<CoordinatorLayout
app:layout_behavior=“@string/bottom_sheet_behavior”>
<AppBarLayout>
<CollapsingToolbarLayout>
<ImageView />
</CollapsingToolbarLayout>
</AppBarLayout>
<NestedScrollView>
<LinearLayout>
< Content ... />
</LinearLayout>
</NestedScrollView>
</CoordinatorLayout>
Run Code Online (Sandbox Code Playgroud)
不幸的是,底部工作表视图应该实现嵌套滚动,否则它们不会获得滚动事件.如果您尝试使用主活动然后将此视图作为底部工作表加载,您将看到滚动事件仅作用于纸张的"工作表",并且有一些奇怪的行为,您可以看到是否继续阅读.
我很确定这可以通过子类化来处理CoordinatorLayout
,甚至可以通过子类化来处理BottomSheetBehavior
.你有什么提示吗?
requestDisallowInterceptTouchEvent()
应该使用,在某些条件下窃取父母的事件:
AppBarLayout
偏移量> 0时AppBarLayout
偏移量是== 0时,我们正在向上滚动(想想它一秒钟,你会看到)可以通过设置OnOffsetChanged
内部应用栏来获得第一个条件;
第二个需要一些事件处理,例如:
switch (MotionEventCompat.getActionMasked(event)) {
case MotionEvent.ACTION_DOWN:
startY = event.getY();
lastY = startY;
userIsScrollingUp = false;
break;
case MotionEvent.ACTION_CANCEL:
case MotionEvent.ACTION_UP:
userIsScrollingUp = false;
break;
case MotionEvent.ACTION_MOVE:
lastY = event.getY();
float yDeltaTotal = startY - lastY; …
Run Code Online (Sandbox Code Playgroud)android ontouchlistener touch-event android-support-library android-support-design
如果我通过移动设备捕获所有touchend事件:
$(document.body).bind('touchend', function (e) {
var touch = e.touches[0]; // doesnt work
...
Run Code Online (Sandbox Code Playgroud)
我需要从e参数中获取touch.screenX,touch.screenY,touch.clientX和touch.clientX.我见过的所有例子都表明e.touches将是一个集合,你可以通过触摸细节获得e.touches[0]
.在我对ipad的测试中,e.touches
总是未定义的.我没有使用任何jquery插件.
还尝试了e.targetTouches,这也是未定义的.
有人可以帮忙吗?
我正在构建一个我需要处理触摸事件的界面.特别是我能够将它们仅启用到片段中的受限区域.为了更好地理解问题,尊重标准和我的应用程序的目标,我计划了导航抽屉,它假设存在许多片段(而不是活动).触摸事件的活动很容易实现,另一方面,我在互联网上读到,片段可能会成为一个问题.
我的应用程序在体系结构级别如下: - MainActivity.java - NavigationDrawer.java - TestFragment.java(现在单个片段,等待解决问题)
我没有找到解释如何做得好(或如何解决问题)的解决方案或教程.然后我问你,简化问题只是" 在片段中启用触摸事件(在这种情况下为getPressure()) ".下面是一些可能有助于解决问题的代码:
TestFragment
public class TestFragment extends Fragment {
private static final String ARG_SECTION_NUMBER = "section_number";
public static TestFragment newInstance(int sectionNumber) {
TestFragment fragment = new TestFragment();
Bundle args = new Bundle();
args.putInt(ARG_SECTION_NUMBER, sectionNumber);
fragment.setArguments(args);
return fragment;
}
public TestFragment() {}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_test, container, false);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override …
Run Code Online (Sandbox Code Playgroud) 我在移动设备上有一个可滚动的列表.他们希望人们能够通过滑动滚动列表,并通过点击选择一行.
抓住了两者.如果您实际滚动列表,我不希望选择一行.这是我发现的:
滚动时不触发:
滚动时是否触发:
简单的解决方案就是坚持点击事件.但我们发现,在某些黑莓设备上,touchstart之间存在非常明显的延迟,然后触发点击或鼠标.这种延迟足以使其在这些设备上无法使用.
所以这给我们留下了其他选择.但是,使用这些选项,您可以滚动列表而不触发您触摸的行以启动滚动.
解决此问题的最佳做法是什么?
我正在开发一个在Android/iOS和台式电脑上运行的应用程序.
我应该使用click
或tap
举办活动吗?
它们之间有什么区别?
桌面上的"点击"是否会起作用?如果没有,(我必须使用click
)我是否错过了tap
有什么优势click
?
我有一些代码可以更改表的类.在手机上,有时桌子对于屏幕来说太宽,用户将拖动/滚动以查看内容.但是,当他们触摸并拖动桌子时,它会触发每次拖动的触发.
我如何测试看看触摸是否是由于触摸拖动而产生的?我尝试跟踪dragstart和dragend,但我无法让它工作,这似乎是一种不优雅的方法.有什么我可以添加到下面的内容基本上可以确定,"这个touchend是否已经结束了?"
$("#resultTable").on("touchend","#resultTable td",function(){
$(this).toggleClass('stay');
});
Run Code Online (Sandbox Code Playgroud)
我提前感谢您的帮助.
PS - 使用最新的jquery,而常规点击工作,与touchend相比,它非常慢.
touch-event ×10
android ×4
jquery ×4
ios ×3
javascript ×3
touch ×3
iphone ×2
scroll ×1
uibutton ×1
uilabel ×1