Мені потрібно відобразити все icon
і title
дії всередині ActionBar
.
Я спробував " withText
" варіант, але це не має ефекту.
Мені потрібно відобразити все icon
і title
дії всередині ActionBar
.
Я спробував " withText
" варіант, але це не має ефекту.
Відповіді:
' always | withText ' спрацює, якщо місця достатньо, інакше буде розміщено лише значок. Ви можете перевірити це на своєму телефоні з обертанням.
<item android:id="@id/menu_item"
android:title="text"
android:icon="@drawable/drawable_resource_name"
android:showAsAction="always|withText" />
Ви можете створювати дії з текстом двома способами:
1- З XML:
<item android:id="@id/resource_name"
android:title="text"
android:icon="@drawable/drawable_resource_name"
android:showAsAction="withText" />
Надуваючи меню, вам слід зателефонувати, getSupportMenuInflater()
оскільки ви використовуєте ActionBarSherlock
.
2- Програмно:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuItem item = menu.add(Menu.NONE, ID, POSITION, TEXT);
item.setIcon(R.drawable.drawable_resource_name);
item.setShowAsAction(MenuItem.SHOW_AS_ACTION_WITH_TEXT);
return true;
}
Обов’язково імпортуйте com.actionbarsherlock.view.Menu
та com.actionbarsherlock.view.MenuItem
.
MenuItem item = menu.add(Menu.NONE, ID, POSITION, TEXT);
Ось ID - це ідентифікатор макета (наприклад, R.layout.myMenuItem), POSITION - це позиція елементів, показаних на панелі дій (наприклад, 1,2,3 rtl), TEXT - це заголовок, який потрібно встановити для елемента панелі дій.
Рішення, яке я знаходжу, полягає у використанні макета спеціальних дій: Ось XML для меню.
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:Eventapp="http://schemas.android.com/apk/res-auto">
<!-- This is a comment. -->
<item
android:id="@+id/action_create"
android:actionLayout="@layout/action_view_details_layout"
android:orderInCategory="50"
android:showAsAction = "always"/>
</menu>
Макет є
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="5dp"
android:gravity="center"
android:text="@string/create"/>
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="5dp"
android:paddingRight="5dp"
android:gravity="center"
android:src="@drawable/ic_action_v"/>
</LinearLayout>
це покаже піктограму та текст разом.
Щоб отримати елемент кліку фрагмента або дії:
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater)
{
//super.onCreateOptionsMenu(menu, inflater);
inflater.inflate(R.menu.menu_details_fragment, menu);
View view = menu.findItem(R.id.action_create).getActionView();
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getActivity(), "Clicked", Toast.LENGTH_SHORT).show();
}
});
}
android:background="?selectableItemBackground"
на LinearLayout
поряд з android:clickable="true"
іandroid:focusable="true"
Якщо хтось1 у 2017 році задається питанням, як це зробити програмно, є спосіб, якого я не бачу у відповідях
.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_WITH_TEXT);
Ви можете додати кнопку на панелі інструментів
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:popupTheme="@style/AppTheme.PopupOverlay"
app:title="title">
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right"
android:layout_marginRight="16dp"
android:background="@color/transparent"
android:drawableRight="@drawable/ic_your_icon"
android:drawableTint="@drawable/btn_selector"
android:text="@string/sort_by_credit"
android:textColor="@drawable/btn_selector"
/>
</android.support.v7.widget.Toolbar>
створити файл btn_selector.xml у файлі, який можна малювати
<?xml version="1.0" encoding="utf-8" ?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:state_selected="true"
android:color="@color/white"
/>
<item
android:color="@color/white_30_opacity"
/>
java:
приватне логічне значення isSelect = false;
OnClickListener для кнопки:
private void myClick() {
if (!isSelect) {
//**your code**//
isSelect = true;
} else {//**your code**//
isSelect = false;
}
sort.setSelected(isSelect);
}
Деякі з вас, хлопці, мають чудові відповіді, але я знайшов ще щось. Якщо ви хочете створити MenuItem з деяким SubMenu програмно:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
SubMenu subMenu = menu.addSubMenu(0, Menu.NONE, 0, "Menu title");
subMenu.getItem().setIcon(R.drawable.ic_action_child);
subMenu.getItem().setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
subMenu.add(0, Menu.NONE, 0, "Subitem 1");
subMenu.add(0, Menu.NONE, 1, "Subitem 2");
subMenu.add(0, Menu.NONE, 2, "Subitem 3");
return true;
}
Спробуйте спочатку додати TextView до панелі меню та використати setCompoundDrawables()
для розміщення зображення на будь-якій стороні, яку ви хочете. Врешті-решт прив’язати клік до текстового перегляду.
MenuItem item = menu.add(Menu.NONE, R.id.menu_item_save, 10, R.string.save);
item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS|MenuItem.SHOW_AS_ACTION_WITH_TEXT);
TextView textBtn = getTextButton(btn_title, btn_image);
item.setActionView(textBtn);
textBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// your selector here }
});
Тут ви можете буквально налаштувати все:
public TextView getTextButton (String btn_title, Drawable btn_image) {
TextView textBtn = new TextView(this);
textBtn.setText(btn_title);
textBtn.setTextColor(Color.WHITE);
textBtn.setTextSize(18);
textBtn.setTypeface(Typeface.create("sans-serif-light", Typeface.BOLD));
textBtn.setGravity(Gravity.CENTER_VERTICAL | Gravity.CENTER_HORIZONTAL);
Drawable img = btn_image;
img.setBounds(0, 0, 30, 30);
textBtn.setCompoundDrawables(null, null, img, null);
// left,top,right,bottom. In this case icon is right to the text
return textBtn;
}
Використання програми: showAsAction = "завжди | withText". Я використовую Android 4.1.1, але він все одно повинен застосовуватися. Мої виглядають як нижче
<item
android:id="@+id/action_sent_current_data"
android:icon="@drawable/ic_upload_cloud"
android:orderInCategory="100"
android:title="@string/action_sent_current_data"
app:showAsAction="always|withText"/>
Виконайте такі дії:
final ActionBar
actionBar = getActionBar();
actionBar.setDisplayShowHomeEnabled(false);
android:logo=@drawable/logo and android:label="@string/actionbar_text"
Думаю, це вам допоможе