Ja, ich denke, was Sie sehen ein HTC-Menü gibt.
Das grafische Bearbeitungskontextmenü, das Sie sehen, ist, glaube ich, neu zu neueren Desire-Modellen (Desire HD und Desire Z). Was ich (mit Ihrem Code) auf meinem ursprünglichen Desire sehe, ist ein Popup-Text-basiertes Menü mit dem HeaderTitle als 'Text bearbeiten' und einer Liste wie 'Alles auswählen', 'Kopieren', 'Einfügen' usw. ABER, ich sehen Sie auch einen Eintrag mit dem Text "Testmenü".
Es kommt mir vor, dass wenn OnCreateContextMenu() für Dinge wie ListView und ImageView aufgerufen wird, das Objekt 'Menü', das an diesen Aufruf übergeben wird, nicht standardmäßig vorbelegt ist. Im Fall eines EditText ist es jedoch so konzipiert, dass es mit der Zwischenablage interagiert und als solches stellt das System ein vorab gefülltes Menü bereit, das auf dem Inhaltszustand des EditText basiert (z. B. wenn Text ausgewählt ist, eine "Kopieren" -Option bereitstellen; Wenn Text in der Zwischenablage vorhanden ist, bietet er eine 'Einfügen'-Option; ... und so weiter).
konnte ich ein Kontextmenü, ohne die ‚Bearbeiten‘ Optionen erhalten, indem die Header und Inhalte Clearing von Ihrem Code zu ändern ...
@Override
public void onCreateContextMenu(ContextMenu menu, View view, ContextMenu.ContextMenuInfo menuInfo)
{
Log.v(TAG, "Creating context menu for view="+view);
// Clear current contents
menu.clearHeader();
menu.clear();
menu.setHeaderTitle("TEST MENU");
menu.add(Menu.NONE, Menu.FIRST+1, Menu.NONE, "Test menu");
super.onCreateContextMenu(menu, view, menuInfo);
}
Die Tatsache, Sie ein grafisches Menü bekommen (möglicherweise abgeleitet von ContextMenu) schlägt vor, dass die obige Technik nicht funktioniert, so dass die einzige Möglichkeit darin besteht, Ihr eigenes ContextMenu-Objekt zu instanziieren, anstatt dasjenige zu verwenden, das an onCreateContextMenu() übergeben wurde.
ich gründlich ausgetestet haben/protokolliert alles um meinen Code, aber immer noch Activity.onCreateContextMenu() nicht einmal
genannt
Dies scheint sehr seltsam - offensichtlich ist es für mich gerufen, wie ich in der Lage gewesen sind um mit dem ContextMenu herumzuspielen, das ihm übergeben wird.
EDIT 1: Denken Sie darüber nach, Sie erwähnen, dass Sie den EditText "tippen" - ist das, was Sie tatsächlich tun (eine kurze Berührung und dann Finger hoch)?
Zu meinem ContextMenu Ich habe zu verwenden, um einen ‚langen‘ Presse/Klick zu bekommen (touch und für ca. 1 Sekunde lang gedrückt halten). Wenn ich einfach auf EditText tippe/berühre, erscheint die "Soft" -Tastatur oder, wenn die Tastatur bereits sichtbar ist, wird der Cursor einfach an eine andere Position im EditText-Feld bewegt.
Offensichtlich hat das Desire Z eine physische Tastatur und das kann etwas anderes Verhalten verursachen (ebenso wie das Desire Z eine andere Version der Sense UI zu meinem Wunsch hat).
Die Tatsache, dass onCreateContextMenu() nie für Sie aufgerufen wird, kann nur eine Sache bedeuten, und das was Sie sehen, ist KEIN ContextMenu und ist eine andere Art von Popup-UI-Element. Zumindest ist das der einzig logische Weg, um es zu verstehen.
Können Sie bestätigen, dass eine ‚lange‘ Presse noch keine ContextMenu für Sie nicht erstellen oder Sie haben die ganze Zeit einen langen Druck wurde unter Verwendung?
Wenn Sie eine lange drücken versucht haben, dann versuchen Sie den Code wie folgt zu ändern ...
Implement OnClickListener
public class MyActivity extends Activity
implements OnLongClickListener {
den Hörer für editText in onCreate Set ...
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
editText=(EditText)findViewById(R.id.editText);
this.registerForContextMenu(editText);
editText.setOnLongClickListener(this); // <-- ADD THIS
}
Fügen Sie den Listener-Code hinzu ...
@Override
public boolean onLongClick(View arg0) {
android.util.Log.v(TAG, "onLongClick() called");
if (arg0 == editText)
{
android.util.Log.v(TAG, "arg0 == editText");
Toast.makeText(this, "onLongClick intercepted", 2000).show();
return true;
}
else
{
android.util.Log.v(TAG, "arg0 != editText");
return false;
}
}
Auf diese Weise, ich bin die Lage, den langen Druck abfangen und durch ‚true‘ aus onLongClick Rückkehr() Ich bin angibt, auf das System, das ich habe ‚verbraucht‘ das Ereignis und Es wird nicht weitergegeben, um die Erstellung meines ContextMenu zu verursachen.
Wenn dies für Sie nicht funktioniert und ein kurzes Antippen führt nach wie vor, dass Pop-up dann angezeigt werden, versuchen OnClickListener Implementierung und zwingenden onClick() statt.
Das Ziel der Übung ist, dass, wenn Sie abfangen können, was die Schaffung des Popup verursacht Sie sehen, können Sie dann Ihre eigene ContextMenu manuell erstellen und zeigen.
Könnten Sie einen Screenshot des Kontextmenüs hochladen? – CommonsWare
Ich bin auch neugierig auf einen Screenshot von dem, was Sie sehen. Ich habe ein originelles Desire und ich habe es gerade mit meinem Handy versucht und ich bekomme mein eigenes Kontextmenü mit Header Icon/Titel und meinen Auswahlmöglichkeiten, wenn ich meinen EditText lange drücke. – Squonk
Sobald ich Zugriff auf USB-Debug-fähigen PC habe, werde ich Screenshots machen.Ich nehme an, es wird heute Abend passieren (von Moskau/Russland Zeit) – barmaley