Как настроить строку заголовка и вкладки с помощью фрагментов

введите здесь описание изображения

Я пишу программу, в которой я использую фрагменты для работы с вкладками, но мне нужно несколько изменений в моем пользовательском интерфейсе.

Мне нужно несколько изменений в моем UI, небольшие 5 вопросов:

Вопрос 1. Как изменить цвет фона строки заголовка (я хочу КРАСНЫЙ)

Вопрос 2. Как изменить цвет фона вкладки (я хочу СЕРЫЙ)

Вопрос 3. Как изменить цвет выбранной вкладки (я хочу КРАСНЫЙ)

Вопрос 4. Как отобразить значок над текстом на вкладках

Вопрос 5. Как разместить кнопку "Поделиться" над строкой заголовка с правой стороны

Манифест.xml:

<application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.example.test.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

MainActivity.java:

 public class MainActivity extends FragmentActivity {

        ViewPager ViewPager;
        TabsAdapter TabsAdapter;

        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);         

            //create a new ViewPager and set to the pager we have created in Ids.xml
            ViewPager = new ViewPager(this);
            ViewPager.setId(R.id.pager);
            setContentView(ViewPager);


            //Create a new Action bar and set title to strings.xml
            final ActionBar bar = getActionBar();
            bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
            bar.setTitle(R.string.app_name);

            //Attach the Tabs to the fragment classes and set the tab title.
            TabsAdapter = new TabsAdapter(this, ViewPager);

            TabsAdapter.addTab(bar.newTab().setText("About"),
                    FragAbout.class, null);
            TabsAdapter.addTab(bar.newTab().setText("Location"),
                    FragLocation.class, null);
            TabsAdapter.addTab(bar.newTab().setText("Menus"),
                    FragMenus.class, null);
            TabsAdapter.addTab(bar.newTab().setText("Reservation"),
                    FragReservation.class, null);
            TabsAdapter.addTab(bar.newTab().setText("Social"),
                    FragSocial.class, null);

            if (savedInstanceState != null) {
                bar.setSelectedNavigationItem(savedInstanceState.getInt("tab", 0));
            }

        }

        @Override
        protected void onSaveInstanceState(Bundle outState) {
            super.onSaveInstanceState(outState);
            outState.putInt("tab", getActionBar().getSelectedNavigationIndex());
        }

        // create TabsAdapter to create tabs and behavior
        public static class TabsAdapter extends FragmentPagerAdapter
        implements ActionBar.TabListener, ViewPager.OnPageChangeListener {

            private final Context mContext;
            private final ActionBar mActionBar;
            private final ViewPager mViewPager;
            private final ArrayList<TabInfo> mTabs = new ArrayList<TabInfo>();

            static final class TabInfo {
                private final Class<?> clss;
                private final Bundle args;

                TabInfo(Class<?> _class, Bundle _args) {
                    clss = _class;
                    args = _args;
                }
            }

            public TabsAdapter(FragmentActivity activity, ViewPager pager) {
                super(activity.getSupportFragmentManager());
                mContext = activity;
                mActionBar = activity.getActionBar();
                mViewPager = pager;
                mViewPager.setAdapter(this);
                mViewPager.setOnPageChangeListener(this);
            }

            public void addTab(ActionBar.Tab tab, Class<?> clss, Bundle args) {
                TabInfo info = new TabInfo(clss, args);
                tab.setTag(info);
                tab.setTabListener(this);
                mTabs.add(info);
                mActionBar.addTab(tab);
                notifyDataSetChanged();             
            }

            @Override
            public void onPageScrollStateChanged(int state) {
                // TODO Auto-generated method stub
            }

            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
                // TODO Auto-generated method stub
            }   

            @Override
            public void onPageSelected(int position) {
                // TODO Auto-generated method stub
                mActionBar.setSelectedNavigationItem(position);
            }

            @Override
            public void onTabReselected(Tab tab, FragmentTransaction ft) {
                // TODO Auto-generated method stub
            }

            @Override
            public void onTabSelected(Tab tab, FragmentTransaction ft) {
                Object tag = tab.getTag();
                for (int i=0; i<mTabs.size(); i++) {
                    if (mTabs.get(i) == tag) {
                        mViewPager.setCurrentItem(i);
                    }
                }
            }

            @Override
            public void onTabUnselected(Tab tab, FragmentTransaction ft) {
                // TODO Auto-generated method stub
            }

            @Override
            public Fragment getItem(int position) {
                TabInfo info = mTabs.get(position);
                return Fragment.instantiate(mContext, info.clss.getName(), info.args);
            }

            @Override
            public int getCount() {
                return mTabs.size();
            }

        }

FragAbout.java:

public class FragAbout extends Fragment {

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {

            View myFragmentView = inflater.inflate(R.layout.frag_about, container, false);
            return myFragmentView;

    } 

}

comment
обратитесь к этому stackoverflow.com/questions/3438276 /   -  person Aravin    schedule 18.09.2013
comment
потому что все находится здесь и здесь   -  person Selvin    schedule 18.09.2013
comment
@Selvin, да, ты прав, но я столкнулся с проблемой, где я могу получить исходный код для этого   -  person Sonali    schedule 18.09.2013


Ответы (3)


Я думаю, вы уже получили ответ, поэтому вы разработали это:

https://stackoverflow.com/questions/19000981/actionbarsherlock-swapping-tabs-using-viewpager< /а>

В любом случае, если вы все еще ищете ответ, Итак

Я настоятельно рекомендую вам использовать ActionBarStyleGenerator:

http://jgilfelt.github.io/android-actionbarstylegenerator/

С помощью этого инструмента вы можете легко создавать темы для своих графических элементов на панели инструментов.

person Android    schedule 22.10.2013
comment
Но как я могу изменить цвет текста на панели действий? - person Pravinsingh Waghela; 13.08.2014

используйте это для QA: 2,3,4

создать xml (tab1) в папке Drawble

<?xml version="1.0" encoding="utf-8"?>
 <selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- When selected, use grey -->
<item android:drawable="@drawable/videos_gray"
      android:state_selected="true" />
<!-- When not selected, use white-->
<item android:drawable="@drawable/videos_white" />

and use that in java file

 // Create an actionbar
    ActionBar actionBar = getActionBar();

    // Hide Actionbar Icon
    actionBar.setDisplayShowHomeEnabled(false);

    // Hide Actionbar Title
    actionBar.setDisplayShowTitleEnabled(false);

    // Create Actionbar Tabs
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

    // Create first Tab
    tab = actionBar.newTab().setTabListener(new FragmentTab1());
    // Create your own custom icon
    tab.setIcon(R.drawable.tab1);
    actionBar.addTab(tab);

    // Create Second Tab
    tab = actionBar.newTab().setTabListener(new FragmentTab2());
    // Set Tab Title
    tab.setText("Tab2");
    actionBar.addTab(tab);

    // Create Third Tab
    tab = actionBar.newTab().setTabListener(new FragmentTab3());
    // Set Tab Title
    tab.setText("Tab3");
    actionBar.addTab(tab);
person vish    schedule 18.09.2013

Ответ на вопрос 1: вы можете создать новый макет и установить его высоту на желаемом «dp» и изменить фон этого макета на красный цвет (используйте для этого ресурс — желательно определить цвет с помощью цветового кода ИЛИ ввести изображение с красным задний план). Это не связано с использованием фрагментов.

Ответ на вопрос 5:

Если вы используете мой вариант, как указано выше, используйте RelatieLayout для строки заголовка. Затем поместите нужную кнопку в крайнюю правую сторону (используйте гравитацию или перетащите вручную или android:layout_alignParentRight="true" - в зависимости от того, как вы хотите)

По остальным вопросам ничего не могу сказать. Надеюсь это поможет

Некоторые другие ссылки:

Как изменить фон вкладки Android виджет?

person Dhaval    schedule 18.09.2013