Реализовал ToggleButton в ActionBar, но есть проблема
В ActionBar при запуске активности иконку видно не сразу, сначала видно значение Share
Можно ли сделать так, чтобы появлялась сразу иконка?
Вот код:
1. Меню:
<item android:id="@+id/menu_toogle"
android:title="Share"
app:showAsAction="ifRoom" />
</menu>
2. Код:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main_read, menu);
return true;
}
boolean birthSort=false;
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_toogle:
if(birthSort){
item.setIcon(R.drawable.toggle_off);
birthSort=false;
}else{
item.setIcon(R.drawable.toggle_on);
birthSort=true;
}
return true;
}
return super.onOptionsItemSelected(item);
}
Если поменять значение app:showAsAction="ifRoom" на always, то это ничего не меняет
Если значение android:title="Share" оставить пустым, то вообще ничего нет, пока не нажмешь на это место, потом появится иконка
-
1видимо вам надо устанавливать свою иконку при создании меню, в onCreateOptionsMenu(), так она у вас и будет появляться только при нажатии, так как устанавливается в onOptionsItemSelected() - реакция на нажатие пункта меню. А вообще лучше установить сам виджет, а не его симуляцию картинкамиpavlofff– pavlofff2019年11月09日 04:16:25 +00:00Commented 9 нояб. 2019 в 4:16
-
Спасибо за наводку, сделал все, сейчас добавлю свой ответ, может пригодится комуru38irk– ru38irk2019年11月09日 04:34:42 +00:00Commented 9 нояб. 2019 в 4:34
1 ответ 1
Решение:
private Menu menu;
@Override
public boolean onCreateOptionsMenu(Menu menu) {
this.menu = menu;
getMenuInflater().inflate(R.menu.menu_main_read, menu);
menu.getItem(0).setIcon(getResources().getDrawable(R.drawable.toggle_off));
return true;
}
boolean birthSort=false;
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_toogle:
if(birthSort){
item.setIcon(R.drawable.toggle_off);
birthSort=false;
}else{
item.setIcon(R.drawable.toggle_on);
birthSort=true;
}
return true;
}
return super.onOptionsItemSelected(item);
}
Начните задавать вопросы и получать на них ответы
Найдите ответ на свой вопрос, задав его.
Задать вопросdefault