2017-06-05 8 views
0

メニュー項目を長押しして特定の操作を実行できますか? 特定のアイテムを長押ししたときにメニューをドロップダウンしようとしています。ここで Androidメニュー項目を長押ししますか?

はメニュー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> 

私はドロップダウンが最初のアイテムが長い

答えて

1

あなたはHandlerRunnableでこれを行うことができます押したときに表示されるがしたいです。 run()メソッド内で、MenuItemViewを取得し、onLongClickリスナーをViewに設定します。ここで

は、作業コードは次のとおりです。

@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

ここでは、あなたの質問に別の解決策です。 私は以下のように解像度/メニュー/ menu.xmlでメニューを使用しています

<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> 

そしてここでは、私の活動のクラスです。メニュー項目にimagebuttonを追加し、画像リソースを設定しました。 Backgroudは透明なmenuItemを持つためにnullに設定されています。

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(); 
    } 
}