Подтвердить что ты не робот

Возможно ли реализовать кнопку Toggle Button в пункте меню Action с помощью Actionbar sherlock в android

У меня есть приложение, у которого есть кнопка переключения в пункте меню действия, хотя я использую Actionbar Sherlock, я не знаю, как поместить кнопку переключения в элемент меню действий. Я не хочу размещать как пользовательский макет в панели действий, но я хочу разместить его как элемент меню. Если кто-нибудь найдет решение, пожалуйста, помогите мне.

Назначение. Если я изменю состояние кнопки переключения, он будет сортировать человека на основе ALphabets и снова в Date of Birth.

Спасибо, Advance!

4b9b3361

Ответ 1

Просто добавьте его как обычную кнопку меню, проверьте его состояние с помощью логической переменной, и вы можете изменить значок и заголовок при изменении режима сортировки

boolean birthSort=false;
@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case R.id.menu_toggle:

        if(birthSort){
            //change your view and sort it by Alphabet
            item.setIcon(icon1)
            item.setTitle(title1)
            birthSort=false;
        }else{
            //change your view and sort it by Date of Birth
            item.setIcon(icon2)
            item.setTitle(title2)
            birthSort=true;
        }
        return true;



    }
    return super.onOptionsItemSelected(item);


}

Не забудьте добавить его в xml, как и любую другую кнопку меню, и настроить android:showAsAction, если вы хотите показать его в переполнении или вне его.

<menu xmlns:android="http://schemas.android.com/apk/res/android">

<item android:id="@+id/menu_toogle"
    android:showAsAction="ifRoom"
    android:title="Share"
     />
</menu>

Ответ 2

Другим подходом было бы использование пользовательского макета для вашего ActionBar:

В основном вы определяете макет, который содержит ваш Toggle:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content">
  <ToggleButton
    android:id="@+id/actionbar_service_toggle"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textOn="Logging On"
    android:textOff="Logging Off" />
</RelativeLayout>

АЛЬТЕРНАТИВА 1: Затем в контейнере Активность или Фрагмент:

ActionBar actionBar = getSupportActionBar();
actionBar.setCustomView(R.layout.actionbar_top);
actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_HOME | ActionBar.DISPLAY_SHOW_CUSTOM);
...
ToggleButton button = (ToggleButton) findViewById(R.id.actionbar_service_toggle);

Обратите внимание, что у вас есть настоящий ToggleButton, и вы обрабатываете его в коде как реальный объект ToggleButton, который имеет множество преимуществ по сравнению с тем, что вы повторно реализуете свой собственный переключатель (тема, надежность, иерархия представлений, встроенная поддержка...).

Исходный код здесь.


АЛЬТЕРНАТИВА 2: Другой способ сделать это - встроить свой пользовательский вид в обычный вид меню:

<menu xmlns:android="http://schemas.android.com/apk/res/android" >
    <item
        android:id="@+id/myswitch"
        android:title=""
        android:showAsAction="always"
        android:actionLayout="@layout/actionbar_service_toggle" />   
</menu>

Ответ 3

Если мне не работает actionLayout, попробуйте app:actionLayout="@layout/actionbar_service_toggle" вместо android:actionLayout="@layout/actionbar_service_toggle", а также app:showAsAction="always" вместо android:showAsAction="always" Это связано с тем, что если вы используете appCompat, пространство имен android не будет использоваться.

Итак, вот окончательная версия:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content">
  <ToggleButton
    android:id="@+id/actionbar_service_toggle"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textOn="Logging On"
    android:textOff="Logging Off" />
</RelativeLayout>

и

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/myswitch"
        android:title=""
        app:showAsAction="always"
        app:actionLayout="@layout/actionbar_service_toggle" />   
</menu>

Ответ 4

создать файл xml в меню:

menu.xml

 <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" tools:context="si.ziga.switchinsideab.MainActivity">
<item android:id="@+id/switchId" android:title="" android:showasaction="always" android:actionlayout="@layout/switch_layout">
   <item android:id="@+id/action_settings" android:orderincategory="100" android:title="@string/action_settings" app:showasaction="never">
</item></item></menu>

И затем перейдите в папку макета, создайте новый XML файл и назовите его switch_layout.xml Здесь код: switch_layout.xml

<!--?xml version="1.0" encoding="utf-8"?-->
<relativelayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="match_parent" android:orientation="horizontal">
 <switch android:id="@+id/switchAB" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerhorizontal="true" android:layout_centervertical="true">
</switch></relativelayout>

В вашем классе MainActivity скопируйте и вставьте этот код:
MainActivity.java

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

switchAB = (Switch)menu.findItem(R.id.switchId)
.getActionView().findViewById(R.id.switchAB);7

Или следуйте этой ссылке об этом материале