Панель действий Android: пользовательские вкладки и переполнение - PullRequest
4 голосов
/ 21 марта 2011

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

Я смог убить все родные стили, используя

<style name="customActionBarTabStyle">
    <item name="android:background">#00000000</item>
</style>

, а затем используйте Tab.setIcon (), чтобы вкладки выглядели так, как мне нужно, но мне нужно, чтобы они реагировали на переключение (переключаясь между двумя Drawables - для включения и выключения).

Я пытался создать селектор Drawable следующим образом:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true"
          android:drawable="@drawable/btn_on" />
    <item android:drawable="@drawable/btn_off" />
</selector>

но вкладки не переключаются в нажатый режим при выборе.

Также я попытался вызвать Tab.setIcon () в TabListener.onTabSelected () и .onTabUnselected () - тоже не повезло.

Кто-нибудь знает хорошее решение для этого?

Кроме того, мне нужно отображать пользовательский вид вместо меню переполнения - я уже набрал кучу «подсказок», чтобы переосмыслить свой пользовательский интерфейс, чтобы «следовать по пути Android», но проблема в том, что пользовательский интерфейс на самом деле не мой переосмыслить - это дело клиента :), поэтому мне бы очень хотелось найти способ обойти недостатки настройки ActionBar.

Любые предложения очень ценятся, заранее спасибо.

Ответы [ 4 ]

1 голос
/ 24 июня 2011

Попробуйте использовать state_selected вместо state_pressed, просто попытайтесь сделать что-то подобное здесь (полностью изменив фоновые изображения для вкладок), и похоже, что вкладки панели действий только вводят выбранное значение true / false, но не нажатое состояние ...

РЕДАКТИРОВАТЬ: похоже, что свойство background входит в это состояние, но не цвет текста, используемый на вкладках ...

0 голосов
/ 21 июня 2014

Вот мой код и значок меняются при выборе вкладки, и меняются обратно, если не выбран.

    public class MainActivity extends FragmentActivity implements ActionBar.TabListener{

    @Override
    protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       requestWindowFeature(Window.FEATURE_ACTION_BAR);
       setContentView(R.layout.activity_main);

       // Set up the action bar.
       final ActionBar actionBar = getActionBar();
       actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
       actionBar.setBackgroundDrawable(null);

    icons = new int[] {
            R.drawable.ic_facebook,
            R.drawable.ic_facebook,
            R.drawable.ic_facebook,
            R.drawable.ic_facebook,
    };
    icons_selected = new int[] {
            R.drawable.ic_launcher,
            R.drawable.ic_launcher,
            R.drawable.ic_launcher,
            R.drawable.ic_launcher,
    };


    // For each of the sections in the app, add a tab to the action bar.
    for (int i = 0; i < mSectionsPagerAdapter.getCount(); i++) {
        // Create a tab with text corresponding to the page title defined by
        // the adapter. Also specify this Activity object, which implements
        // the TabListener interface, as the callback (listener) for when
        // this tab is selected.
        actionBar.addTab(
                actionBar.newTab()
                        .setText(mSectionsPagerAdapter.getPageTitle(i))
                        .setIcon(icons[i])
                        .setTabListener(this)
        );
    }
    }

и это

    @Override
    public void onTabSelected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction){

    getActionBar().getSelectedTab().setIcon(icons_selected[tab.getPosition()]);
    }

    @Override
    public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
    getActionBar().getSelectedTab().setIcon(icons[tab.getPosition()]);
    }

    @Override
    public void onTabReselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
    }
0 голосов
/ 15 августа 2012

Просто, чтобы сделать решение более представительным:

@ taf сказал решение: вам нужно установить android:duplicateParentState="true" в родительском макете, который вы используете в качестве пользовательского представления для вкладки..

0 голосов
/ 22 февраля 2012

Я думаю, что вам придется использовать Android: selectableItemBackground взгляните на это это может помочь.

Удачи

...