我正在创建一个呼叫/拨号按钮,当我点击该呼叫/拨号按钮时,将根据edittext中显示的输入进行呼叫。我设法做到了那一部分。你们可以告诉我,我是否可以长时间点击同一个电话/拨号按钮,以便吐司可以出来要求用户选择其他东西?
我对“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);
}
此代码正常运行。我希望可以在同一个呼叫/拨号按钮上进行更长时间的点击,这样按钮就可以正常点击进行通话,而长按则可以弹出祝酒词。提前谢谢。
答案 0 :(得分:5)
请注意,在长按一下监听器上返回“false”会让UI响应长按一下,也可以短按一下。如果你想杀死它,请返回“true”。 “True”表示“是的,我使用过此事件”,“false”表示“无论我是否使用过,环境都可以自由回应”。 (我知道这是因为我在我自己的应用程序中使用了AkashG的答案。)
答案 1 :(得分:0)
是的,你可以这样做:
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(new OnClickListener(){
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;
答案 2 :(得分:0)
带有SimpleOnGestureListener的GestureDetector可以帮助您区分不同类型的印刷机。 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是一个非常好的课程,可以进行一些研究,它可以非常有用并且不会太复杂。希望这会有所帮助。