web-dev-qa-db-fra.com

mettre des onglets au bas de l'écran

Je veux mettre des onglets dans la partie inférieure de mon écran. J'ai pour cela le code suivant:

package info.androidhive.tabsswipe;

import info.androidhive.tabsswipe.adapter.TabsPagerAdapter;
import Android.app.ActionBar;
import Android.app.ActionBar.Tab;
import Android.app.FragmentTransaction;
import Android.os.Bundle;
import Android.support.v4.app.FragmentActivity;
import Android.support.v4.view.ViewPager;

public class MainActivity extends FragmentActivity implements
        ActionBar.TabListener {

    private ViewPager viewPager;
    private TabsPagerAdapter mAdapter;
    private ActionBar actionBar;
    // Tab titles
    private String[] tabs = { "Top Rated", "Games", "Movies" };

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

        // Initilization
        viewPager = (ViewPager) findViewById(R.id.pager);
        actionBar = getActionBar(); 
        mAdapter = new TabsPagerAdapter(getSupportFragmentManager());

        viewPager.setAdapter(mAdapter) ;
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
        actionBar.setDisplayShowHomeEnabled(false);
        actionBar.setDisplayShowTitleEnabled(false);

        // Adding Tabs
        for (String tab_name : tabs) {
            actionBar.addTab(actionBar.newTab().setText(tab_name)
                    .setTabListener(this));
        }

        /**
         * on swiping the viewpager make respective tab selected
         * */
        viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {

            @Override
            public void onPageSelected(int position) {
                // on changing the page
                // make respected tab selected
                actionBar.setSelectedNavigationItem(position);
            }

            @Override
            public void onPageScrolled(int arg0, float arg1, int arg2) {
            }

            @Override
            public void onPageScrollStateChanged(int arg0) {
            }
        });
    }

    @Override
    public void onTabReselected(Tab tab, FragmentTransaction ft) {
    }

    @Override
    public void onTabSelected(Tab tab, FragmentTransaction ft) {
        // on tab selected
        // show respected fragment view
        viewPager.setCurrentItem(tab.getPosition());
    }

    @Override
    public void onTabUnselected(Tab tab, FragmentTransaction ft) {
    }

}

Par ce code, j'ai la disposition suivante: 

package info.androidhive.tabsswipe;

import info.androidhive.tabsswipe.adapter.TabsPagerAdapter;
import Android.app.ActionBar;
import Android.app.ActionBar.Tab;
import Android.app.FragmentTransaction;
import Android.os.Bundle;
import Android.support.v4.app.FragmentActivity;
import Android.support.v4.view.ViewPager;

public class MainActivity extends FragmentActivity implements
        ActionBar.TabListener {

    private ViewPager viewPager;
    private TabsPagerAdapter mAdapter;
    private ActionBar actionBar;
    // Tab titles
    private String[] tabs = { "Top Rated", "Games", "Movies" };

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

        // Initilization
        viewPager = (ViewPager) findViewById(R.id.pager);
        actionBar = getActionBar(); 
        mAdapter = new TabsPagerAdapter(getSupportFragmentManager());

        viewPager.setAdapter(mAdapter) ;
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
        actionBar.setDisplayShowHomeEnabled(false);
        actionBar.setDisplayShowTitleEnabled(false);

        // Adding Tabs
        for (String tab_name : tabs) {
            actionBar.addTab(actionBar.newTab().setText(tab_name)
                    .setTabListener(this));
        }

        /**
         * on swiping the viewpager make respective tab selected
         * */
        viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {

            @Override
            public void onPageSelected(int position) {
                // on changing the page
                // make respected tab selected
                actionBar.setSelectedNavigationItem(position);
            }

            @Override
            public void onPageScrolled(int arg0, float arg1, int arg2) {
            }

            @Override
            public void onPageScrollStateChanged(int arg0) {
            }
        });
    }

    @Override
    public void onTabReselected(Tab tab, FragmentTransaction ft) {
    }

    @Override
    public void onTabSelected(Tab tab, FragmentTransaction ft) {
        // on tab selected
        // show respected fragment view
        viewPager.setCurrentItem(tab.getPosition());
    }

    @Override
    public void onTabUnselected(Tab tab, FragmentTransaction ft) {
    }

}

Par ce code, voici comment se présente l’écran après la compilation:

enter image description here

Comment puis-je mettre des onglets au bas de l'écran?

15
osimer pothe

Cet exemple de code xml définit l'onglet de déplacement en bas de l'écran:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="fill_parent"
    Android:layout_height="fill_parent"
    Android:orientation="vertical" >

    <TabHost
        Android:id="@Android:id/tabhost"
        Android:layout_width="fill_parent"
        Android:layout_height="fill_parent" >

        <RelativeLayout
            Android:layout_width="fill_parent"
            Android:layout_height="fill_parent" >

            <FrameLayout
                Android:id="@Android:id/tabcontent"
                Android:layout_width="fill_parent"
                Android:layout_height="fill_parent"
                Android:layout_below="@Android:id/tabs" >

                <FrameLayout
                    Android:id="@+id/tab_home"
                    Android:layout_width="fill_parent"
                    Android:layout_height="fill_parent" />

                <FrameLayout
                    Android:id="@+id/tab_video"
                    Android:layout_width="fill_parent"
                    Android:layout_height="fill_parent" />

                <FrameLayout
                    Android:id="@+id/tab_audio"
                    Android:layout_width="fill_parent"
                    Android:layout_height="fill_parent" >
                </FrameLayout>

                <FrameLayout
                    Android:id="@+id/tab_blog"
                    Android:layout_width="fill_parent"
                    Android:layout_height="fill_parent" >
                </FrameLayout>

                <FrameLayout
                    Android:id="@+id/tab_gal"
                    Android:layout_width="fill_parent"
                    Android:layout_height="fill_parent" >
                </FrameLayout>

                <FrameLayout
                    Android:id="@+id/tab_more"
                    Android:layout_width="fill_parent"
                    Android:layout_height="fill_parent" >
                </FrameLayout>
            </FrameLayout>

            <TabWidget
                Android:id="@Android:id/tabs"
                Android:layout_width="fill_parent"
                Android:layout_height="wrap_content"
                Android:layout_alignParentBottom="true"  //align parent bottom mainly used for move the tab to bottom of the screen.
                Android:background="@drawable/ic_launcher"
                Android:divider="@null" />

            <!-- Android:background="#d8e49c" -->
        </RelativeLayout>
    </TabHost>

</LinearLayout>
7
Stephen

En fait, cela va à l’encontre des directives de conception d’Android car au bas de la page, il y a des boutons souples comme le bouton précédent, le bouton principal, etc.

http://developer.Android.com/design/patterns/pure-Android.html

Mais si vous insistez pour les mettre en bas, vous pouvez l'implémenter comme dans l'exemple de GitHub consistant en des onglets en bas, en utilisant FragmentTabHost. 

https://github.com/rameshkec85/BottomTabsFragmentTabHost

15
Priyank Patel

avec une barre d'action, vous ne pourrez ajouter que des onglets en haut, car c'est ainsi que les applications Android doivent ressembler. Avoir des onglets en bas est purement du style iOS. et si vous souhaitez toujours obtenir le même regard sur:

ceci . La source Github peut être trouvée ici

une solution supplémentaire: https://stackoverflow.com/a/23150258/2765497 for api <11, remplace TabView par FragmentTabVeiw et ajoute d'autres importations de la bibliothèque Sherlock of Support

0
Flinbor

Ne faites pas cela, les onglets devraient toujours être en haut dans Android.

0
Mark Buikema