2017-06-05 1 views
0

Ist es möglich, einen Menüeintrag lange zu drücken, um eine bestimmte Aktion auszuführen? Ich versuche ein Menü Dropdown zu haben, wenn ich ein bestimmtes Element lange drücke.Lange auf Android-Menüelement drücken?

Hier ist das Menü xml

<item 
    android:id="@+id/add_item" 
    android:icon="@drawable/ic_add_black_24dp" 
    android:showAsAction="ifRoom" 
    android:title="Add Item"> 
</item> 

<item 
    android:id="@+id/open_menu" 
    android:icon="@drawable/ic_menu_black_24dp" 
    android:showAsAction="ifRoom|withText" 
    android:title="Open Menu"> 
</item> 

Ich möchte ein Drop-Down haben scheinen, wenn das erste Element lange

Antwort

1

gedrückt wird Sie dies mit Handler und Runnable tun können . Inside run() Methode, erhalten Sie die View Ihrer gewünschten MenuItem und onLongClick Listener auf View.

Hier ist der Arbeitscode:

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.menu_main, menu); 

    new Handler().post(new Runnable() { 
     @Override 
     public void run() { 
      final View view = findViewById(R.id.add_item); 

      if (view != null) { 
       view.setOnLongClickListener(new View.OnLongClickListener() { 
        @Override 
        public boolean onLongClick(View v) { 

         // Do something... 

         Toast.makeText(getApplicationContext(), "Long pressed", Toast.LENGTH_SHORT).show(); 
         return true; 
        } 
       }); 
      } 
     } 
    }); 

    return super.onCreateOptionsMenu(menu); 
} 

OUTPUT:

enter image description here

0

Hier ist eine andere Lösung für Ihre Frage.

<menu xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item 
     android:id="@+id/action_send" 
     android:orderInCategory="100" 
     android:title="@string/send_menu" 
     app:showAsAction="always" /> 
</menu> 

Und hier ist meine Aktivitätsklasse: Ich habe, wie unten ein Menü in res/Menü/menu.xml verwendet. Ich habe dem Menüelement eine Bildschaltfläche hinzugefügt und eine Bildressource festgelegt. Backgroud wird auf null gesetzt, um ein transparentes menuItem zu erhalten.

public class MyActivity extends AppCompatActivity { 
    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.menu, menu); 
     MenuItem item = menu.findItem(R.id.action_send); 
     ImageButton imageButton = new ImageButton(this); 
     imageButton.setImageResource(R.drawable.ic_send_white_24dp); 
     imageButton.setBackground(null); 
     item.setActionView(imageButton); 
     item.getActionView().setOnLongClickListener(new View.OnLongClickListener() { 
      @Override 
      public boolean onLongClick(View v) { 
       Log.d("Send Button", "Long pressed"); 
       Toast.makeText(MainActivity.this, "Send button long pressed", Toast.LENGTH_LONG).show(); 
       onSendMenuItemLongClick(); 
       return true; 
      } 
     }); 

     item.getActionView().setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       onSendMenuItemClick(item); 
      } 
     }); 

     return super.onCreateOptionsMenu(menu); 
    } 

    private void onSendMenuItemLongClick() { 

    } 

    private void onSendMenuItemClick(MenuItem item) { 
     Toast.makeText(this, "Send button clicked", Toast.LENGTH_LONG).show(); 
    } 
} 
Verwandte Themen