clicklistener和longclicklistener在同一个按钮上?
我正在创建一个呼叫/拨号按钮,当我点击该呼叫/拨号按钮时,将根据edittext中显示的输入进行呼叫。我设法做到了这一点。你们能否告诉我,我是否可以再点击一次相同的电话/拨号按钮,以便敬酒可以出来要求用户选择其他的东西?clicklistener和longclicklistener在同一个按钮上?
我做了一些关于“setOnLongClickListener”的研究,但我不确定我是否可以将它结合在相同的呼叫/拨号按钮中?我附加了我设法实现的工作拨号功能,想知道“setOnLongClickListener”是否可以在代码中组合在一起?
private void dialANumber() {
try {
buttonCall = (ImageButton) findViewById(R.id.imageButton2);
buttonCall.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
if (display != null) {
Intent callNumber = new Intent();
callNumber
.setAction(android.content.Intent.ACTION_CALL);
callNumber.setData(Uri.parse("tel:" + display.getText()));
startActivity(callNumber);
}
}
});
} catch (ActivityNotFoundException anfe) {
Log.e("DialANumber", "Dialing the number failed", anfe);
}
该代码正在工作。我希望可以在相同的呼叫/拨号按钮上进行更长时间的点击,以便该按钮可以有正常的点击拨打电话,而长按则弹出一个敬酒。提前致谢。
是的,你可以这样做:
XML文件:
<Button
android:id="@+id/call"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="CALL"/>
<ImageButton
android:id="@+id/callBtn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/ic_launcher"/>
对于按钮单击事件:
Button button=(Button) findViewById(R.id.call);
button.setOnLongClickListener(new OnLongClickListener() {
public boolean onLongClick(View v) {
Toast.makeText(getBaseContext(), "Long CLick", Toast.LENGTH_SHORT).show();
return false;
}
});
button.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
if (display != null) {
Intent callNumber = new Intent();
callNumber
.setAction(android.content.Intent.ACTION_CALL);
callNumber.setData(Uri.parse("tel:" + display.getText()));
startActivity(callNumber);
}
}
});
对于ImageButton的:
ImageButton imageButton=(ImageButton) findViewById(R.id.callBtn);
imageButton.setOnClickListener(新的OnClick侦听器(){
public void onClick(View v) {
if(check==false){
Toast.makeText(getBaseContext(), "CLick", Toast.LENGTH_SHORT).show();
}
imageButton.setOnLongClickListener(new OnLongClickListener() {
public boolean onLongClick(View v) {
check=true;
if(check){
Log.d("bool", check+"");
Toast.makeText(getBaseContext(), "Long CLick", Toast.LENGTH_SHORT).show();
check=false;
}
return false;
}
});
声明此顶部(golbally):
boolean check=false;
嗨谢谢..我已经尝试,但setOnLongClickListener提示3修复:更改为setOnClickListener(..)',更改为setOnKeyListener(..)'并更改为setOnTouchListener(..)'... – jason 2012-07-07 11:32:52
我想你必须在xml文件中声明imageButton。将其更改为只有按钮,它不会要求您修复then.i实现它并工作正常。 – AkashG 2012-07-07 11:35:35
我改变按钮=(Button)findViewById(R.id.call);进入buttonCall =(ImageButton)findViewById(R.id.imageButton2);正如我做我的通话按钮是imageButton,因为我使它成为图像.. setOnLongclickListener无法在imageButton上工作? – jason 2012-07-07 11:39:40
一个GestureDetector与SimpleOnGestureListener会帮助你在不同类型的印刷机区分。 GestureDectector是一个可以读取不同类型的触摸事件(例如,单击和长按)的类,并将它们发送给监听器,该监听器以不同方式处理每种类型。以下是关于Detector和Listener的文档。
http://developer.android.com/reference/android/view/GestureDetector.html
http://developer.android.com/reference/android/view/GestureDetector.SimpleOnGestureListener.html
首先,设置你的SimpleOnGestureListener,你重写将onSingleTapUp
和onLongPress
的重要方法。在onCreate
中,创建一个引用监听器的GestureDetector实例。然后,将OnTouchListener
附加到您的按钮上,将事件发送到您的探测器。你会希望它看起来是这样的:
//Set up the Detector
GestureDetector.SimpleOnGestureListener myGestureListener = new GestureDetector.SimpleOnGestureListener()
{
@Override
public boolean onSingleTapUp(MotionEvent e)
{
//Your onClick code
return false;
}
@Override
public void onLongPress(MotionEvent e)
{
//Your LongPress code
super.onLongPress(e);
}
};
//And make a variable for your GestureDetector
GestureDetector myGestureDetector;
...
@Override
onCreate(Bundle b)
{
...
myGestureDetector = new GestureDetector(myActivity.this, myGestureListener);
...
}
...
//And finally, wherever you are setting up your button
button.setOnTouchListener(new View.OnTouchListener(){
@Override
public boolean onTouch(View view, MotionEvent motionEvent)
{
myGestureDetector.onTouchEvent(motionEvent);
return false;
}
有一个一堆你想获得更看中其他类型的情况下,事件这个类可以理解的。 GestureDetector是一个非常好的类,可以做一些研究,它可能非常有用,并不太复杂。希望这可以帮助。
嗨,那里谢谢,我会尽快实现..我的笔记本电脑刚刚崩溃了几天.. :-( – jason 2012-07-11 12:10:05
请注意,对长单击侦听器返回“false”会使用户界面对长单击作出响应。如果你想杀掉那个,返回“true”。 “真”是指“是的,我使用过这个事件”,“错误”是指“我是否使用过它,环境也可以自由回应。” (我知道这是因为我只是在我自己的应用中使用了AkashG的答案。)
要注意的点“请注意,返回”假“长按听众将有响应长按点的用户界面短暂点击“。自2小时以来一直在挣扎。 – 2014-08-21 19:46:26
你至少试过了吗? – Blackbelt 2012-07-07 11:06:26
是的,我做了..我改变按钮=(按钮)findViewById(R.id.call);进入buttonCall =(ImageButton)findViewById(R.id.imageButton2); – jason 2012-07-07 11:36:44