Android Может ли кто-нибудь знать о параметрах элемента панели действий при длительном нажатии, я хочу отображать текст в меню LongClick в меню панели действий, например, подсказку при длительном нажатии на панель действий при длительном нажатии
Параметры Android ActionBar с длинным кликом
Ответы (6)
Вы хотите зафиксировать долгое нажатие на пункт меню на панели действий? Что касается меня, найдя 2,3 часа, я нашел это решение. Это отлично работает для меня.
@Override
public boolean onCreateOptionsMenu(final Menu menu) {
getMenuInflater().inflate(R.menu.menu, menu);
new Handler().post(new Runnable() {
@Override
public void run() {
final View v = findViewById(R.id.action_settings);
if (v != null) {
v.setOnLongClickListener(new CustomLongOnClickListener());
}
}
});
return true;
}
Для меня следующий подход отлично работает для более новых версий Android — я тестировал его с Android 4.2 и Android 5.0.1.
Идея состоит в том, что я заменяю представление значка действия пользовательским представлением. Здесь мне нужно обработать одиночный щелчок, и я могу обработать длинный щелчок.
Если я хочу, чтобы внешний вид был точно таким же, как обычные значки панели действий, работает следующее.
Сначала создайте макет, содержащий только кнопку ImageButton с вашим значком.
<?xml version="1.0" encoding="utf-8"?>
<ImageButton xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/myButton"
style="?android:attr/actionButtonStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@layout/text_view_initializing"
android:src="@drawable/ic_action_plus" />
Затем поместите этот ImageButton в панель действий и прикрепите к нему слушателей.
MenuItem myItem = menu.findItem(R.id.my_action);
myItem.setActionView(R.layout.my_image_button);
myItem.getActionView().setOnClickListener(new OnClickListener() {
@Override
public void onClick(final View v) {
// here, I have to put the stuff that normally goes in onOptionItemSelected
}
});
myItem.getActionView().setOnLongClickListener(new OnLongClickListener() {
@Override
public boolean onLongClick(final View v) {
// here, I put the long click stuff
}
});
Важное замечание: это будет работать только в том случае, если элемент отображается на панели действий. Таким образом, все, что вы хотите сделать по долгому щелчку, не будет доступно таким образом, если опция появится в раскрывающемся меню.
user1206890, вам не нужно слушать событие длинного клика. Если вы хотите показать подсказку к действию, достаточно установить заголовок в меню< /а> добавить. Проверял на 2.3 и 4.0.
Если вы создаете свое собственное представление действий с помощью android:actionLayout
, вы можете настроить прослушиватели на свои собственные виджеты для событий с длинным щелчком. У вас нет доступа к виджетам на панели действий, которые вы не создали сами.
Я думаю, что "findViewById" - это самый простой способ найти.
Просто выполните
View action_example = findViewById(R.id.action_example);
if(action_example!=null)action_example.setOnLongClickListener(
new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
Toast.makeText(MainActivity.this, "action_example", Toast.LENGTH_SHORT).show();
return true;
}
}
);
Это код функции, которая работает со мной благодаря тому, что @YeeKhin изменил «main» на имя вашего меню и «action_refresh» на имя вашего действия и «Activity» на имя вашей деятельности.
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
new Handler().post(new Runnable() {
@Override
public void run() {
final View v = findViewById(R.id.action_refresh);
if (v != null) {
v.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
Toast.makeText(Activity.this,"Long Press!!",Toast.LENGTH_LONG).show();
return false;
}
});
}
}
});
return true;
}