2015-06-08 4 views
1

Я бы поставил слушателя на действие длинного клика для элемента в меню панели инструментов. Я создаю элементOnLongClickListener по пункту меню

<item 
    android:id="@+id/action_center" 
    android:title="center" 
    android:icon="@mipmap/ic_center_direction_100" 
    app:actionViewClass="android.widget.ImageView" 
    app:showAsAction="always" /> 

И я получаю это таким образом

@Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater menuInflater = getMenuInflater(); 
    menuInflater.inflate(R.menu.menu_map, menu); 

    /* Set onclick listener on center icon to center at user position */ 
    MenuItem centering = menu.findItem(R.id.action_center); 

    ImageView button = (ImageView) centering.getActionView(); 
    if (button == null) 
     return true; 

    button.setOnLongClickListener(
      new View.OnLongClickListener() { 
       @Override 
       public boolean onLongClick(View v) { 
        centerUserPosition(); 
        return true; 
       } 
      } 
    ); 

    return true; 
} 

Но это не работает. Каков правильный способ сделать это?

+0

Вы не можете установить прослушиватель на 'onCreateOptionsMenu' реализовать' onMenuItemSelected' и реализовать runnable delay. AFAIK вы не можете установить длинный клик на элементы меню по умолчанию. Android означает –

ответ

0

Вы можете настроить свою собственную кнопку на панели инструментов. Затем просто установите onLongClickListener на эту кнопку.

<android.support.v7.widget.Toolbar 
    android:id="@+id/mytoolbar" 
    android:layout_height="55dp" 
    android:layout_width="match_parent" 
    android:minHeight="55dp" 
    android:background="?attr/colorPrimary" 
    android:elevation="5dp"> 

<Button 
    android:id="@+id/toolbar_button" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="end"/> 

</android.support.v7.widget.Toolbar> 

Кнопка должна быть 32dp x 32dp с фактическим значком 24dp x 24dp.

//In your onCreate method 
Toolbar toolbar = (Toolbar) findViewById(R.id.mytoolbar); 
setSupportActionBar(toolbar); 
getSupportActionBar().setDisplayShowTitleEnabled(false); 
getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
getSupportActionBar().setHomeButtonEnabled(true); 

Button button = (Button)findViewById(R.id.toolbar_button); 
button.setOnLongClickListener(
     new View.OnLongClickListener() { 
      @Override 
      public boolean onLongClick(View v) { 
       centerUserPosition(); 
       return true; 
      } 
     } 
); 
+0

Я знаю, что могу это сделать. Но я хочу использовать меню. –

+0

Хорошо, я не уверен, что это сработает, но вы можете попробовать использовать класс ActionProvider, а затем заставить его реализовать onLongClickListener. Эта ссылка может помочь вам запустить https://gist.github.com/vvakame/1460581 – funkomatic