लगता है वहाँ ज्यादा नहीं है आप API का उपयोग करके कर सकते हैं: android paste event
Source reading to the rescue!
मैं TextView
(EditText
के एंड्रॉयड स्रोत में खोदे गए एकहैकुछ अलग विन्यास के साथ) और पता चला कि कट/कॉपी/पेस्ट विकल्पों की पेशकश करने वाला मेनू सिर्फ एक संशोधित ContextMenu
(source) है।
सामान्य संदर्भ-मेनू के लिए, दृश्य को मेनू (source) बनाना होगा और फिर कॉलबैक-विधि (source) में बातचीत को संभालना होगा।
क्योंकि हैंडलिंग विधि public
है, हम EditText
को विस्तारित करके और विभिन्न कार्यों पर प्रतिक्रिया करने के लिए विधि को ओवरराइट करके इसे आसानी से जोड़ सकते हैं।
import android.content.Context;
import android.util.AttributeSet;
import android.widget.EditText;
import android.widget.Toast;
/**
* An EditText, which notifies when something was cut/copied/pasted inside it.
* @author Lukas Knuth
* @version 1.0
*/
public class MonitoringEditText extends EditText {
private final Context context;
/*
Just the constructors to create a new EditText...
*/
public MonitoringEditText(Context context) {
super(context);
this.context = context;
}
public MonitoringEditText(Context context, AttributeSet attrs) {
super(context, attrs);
this.context = context;
}
public MonitoringEditText(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
this.context = context;
}
/**
* <p>This is where the "magic" happens.</p>
* <p>The menu used to cut/copy/paste is a normal ContextMenu, which allows us to
* overwrite the consuming method and react on the different events.</p>
* @see <a href="http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/2.3_r1/android/widget/TextView.java#TextView.onTextContextMenuItem%28int%29">Original Implementation</a>
*/
@Override
public boolean onTextContextMenuItem(int id) {
// Do your thing:
boolean consumed = super.onTextContextMenuItem(id);
// React:
switch (id){
case android.R.id.cut:
onTextCut();
break;
case android.R.id.paste:
onTextPaste();
break;
case android.R.id.copy:
onTextCopy();
}
return consumed;
}
/**
* Text was cut from this EditText.
*/
public void onTextCut(){
Toast.makeText(context, "Cut!", Toast.LENGTH_SHORT).show();
}
/**
* Text was copied from this EditText.
*/
public void onTextCopy(){
Toast.makeText(context, "Copy!", Toast.LENGTH_SHORT).show();
}
/**
* Text was pasted into the EditText.
*/
public void onTextPaste(){
Toast.makeText(context, "Paste!", Toast.LENGTH_SHORT).show();
}
}
अब, जब उपयोगकर्ता कटौती/कॉपी/पेस्ट का उपयोग करता है, एक Toast
दिखाया गया है (बेशक आप अन्य बातों के कर सकता है, भी): यहाँ एक उदाहरण-कार्यान्वयन है।
साफ बात यह है कि इस Android 1.5 करने के लिए नीचे काम करता है और आप संदर्भ मेनू फिर से बनाने (ऊपर लिंक प्रश्न में सुझाव दिया की तरह) है, जो की लगातार नज़र रखेंगे की जरूरत नहीं है मंच (उदाहरण के लिए एचटीसी सेंस के साथ)।
स्रोत
2013-02-20 13:44:50
अच्छी चुनौती। मेरा जवाब देखो। –