2011-12-20 113 views
11

我想創建一個CustomButton它有一個預定義的onClick。 事實上,我的目標會做的比Android按鈕onclick覆蓋

CustomButton mButton = getViewById(..); 
mButton.setOnClickListener(new OnClickListener() { 
@Override 
public void onClick(View v) { 
    show_something() 
} 

同樣的工作,有沒有一種方法嵌入到Listener從按鍵繼承的CustomButton對象? 我想是建立在我的佈局XML文件中的CustomButton,並沒有提到在我的活動這個按鈕,這將使:

的main.xml:

<LinearLayout xmlns:"..."> 
    <com.mypackage.view.CustomButton 
     (attributes)/> 
</LinearLayout> 

CustomButton.java:

class CustomButton extends Button implements... { 

@Override 
OnClick (or something like that, that's the core of my question, what to put here) 
} 

myActivity.java

public class myActivity extends Activity { 
/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    } 
} 

非常感謝。

回答

22

你是非常接近:

import android.content.Context; 
import android.util.AttributeSet; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 

public class CustomButton extends Button implements OnClickListener{ 

    public CustomButton(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
     init(); 
    } 

    public CustomButton(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     init(); 
    } 

    public CustomButton(Context context) { 
     super(context); 
     init(); 
    } 

    private void init(){ 
     setOnClickListener(this); 
    } 

    @Override 
    public void onClick(View v) { 
     // Do something 
    } 

} 
2

在您的按鈕類只實現:

@Override 
public void onClick(View v) { 
    showSomething(); 
} 

或者,如果你想更精細的控制:

@Override 
public boolean onTouchEvent(MotionEvent event) { 
    showSomething(); 
} 

您可以通過檢查event.getAction實現方法的點擊邏輯( ),或者將它發送給GestureDetector以確定何時執行了點擊。

3

使用該代碼:

class CustomButton extends Button implements View.OnClickListener{ 
    CustomButton(Context c, AttributeSet attrs) { 
     ... 
     setOnClickListener(this); 
     ... 
    } 

    @override 
    public void onClick(View v){ 
     //add your code here 
    } 
}