Android TabLayout Android Design

前端 未结 7 983
刺人心
刺人心 2020-11-30 21:39

I\'m trying to get the new TabLayout in the android design library working.

I\'m following this post:

http://android-developers.blogspot.com/2015/05/android

7条回答
  •  再見小時候
    2020-11-30 21:58

    I had to collect information from various sources to put together a functioning TabLayout. The following is presented as a complete use case that can be modified as needed.

    Make sure the module build.gradle file contains a dependency on com.android.support:design.

    dependencies {
        compile 'com.android.support:design:23.1.1'
    }
    

    In my case, I am creating an About activity in the application with a TabLayout. I added the following section to AndroidMainifest.xml. Setting the parentActivityName allows the home arrow to take the user back to the main activity.

    
    
    
        
        
    
    

    styles.xml contains the following entries. This app has a white AppBar for the main activity and a blue AppBar for the About activity. We need to set colorPrimaryDark for the About activity so that the status bar above the AppBar is blue.

    
    
    
    

    AboutActivity.java contains the following code. In my case I have a fixed number of tabs (7) so I could remove all the code dealing with dynamic tabs.

    import android.os.Bundle;
    import android.support.design.widget.TabLayout;
    import android.support.v4.app.Fragment;
    import android.support.v4.app.FragmentManager;
    import android.support.v4.app.FragmentPagerAdapter;
    import android.support.v4.view.ViewPager;
    import android.support.v7.app.ActionBar;
    import android.support.v7.app.AppCompatActivity;
    import android.support.v7.widget.Toolbar;
    
    public class AboutActivity extends AppCompatActivity {
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.about_coordinatorlayout);
    
            // We need to use the SupportActionBar from android.support.v7.app.ActionBar until the minimum API is >= 21.
            Toolbar supportAppBar = (Toolbar) findViewById(R.id.about_toolbar);
            setSupportActionBar(supportAppBar);
    
            // Display the home arrow on supportAppBar.
            final ActionBar appBar = getSupportActionBar();
            assert appBar != null;// This assert removes the incorrect warning in Android Studio on the following line that appBar might be null.
            appBar.setDisplayHomeAsUpEnabled(true);
    
            //  Setup the ViewPager.
            ViewPager aboutViewPager = (ViewPager) findViewById(R.id.about_viewpager);
            assert aboutViewPager != null; // This assert removes the incorrect warning in Android Studio on the following line that aboutViewPager might be null.
            aboutViewPager.setAdapter(new aboutPagerAdapter(getSupportFragmentManager()));
    
            // Setup the TabLayout and connect it to the ViewPager.
            TabLayout aboutTabLayout = (TabLayout) findViewById(R.id.about_tablayout);
            assert aboutTabLayout != null; // This assert removes the incorrect warning in Android Studio on the following line that aboutTabLayout might be null.
            aboutTabLayout.setupWithViewPager(aboutViewPager);
        }
    
        public class aboutPagerAdapter extends FragmentPagerAdapter {
            public aboutPagerAdapter(FragmentManager fm) {
                super(fm);
            }
    
            @Override
            // Get the count of the number of tabs.
            public int getCount() {
                return 7;
            }
    
            @Override
            // Get the name of each tab.  Tab numbers start at 0.
            public CharSequence getPageTitle(int tab) {
                switch (tab) {
                    case 0:
                        return getString(R.string.version);
    
                    case 1:
                        return getString(R.string.permissions);
    
                    case 2:
                        return getString(R.string.privacy_policy);
    
                    case 3:
                        return getString(R.string.changelog);
    
                    case 4:
                        return getString(R.string.license);
    
                    case 5:
                        return getString(R.string.contributors);
    
                    case 6:
                        return getString(R.string.links);
    
                    default:
                        return "";
                }
            }
    
            @Override
            // Setup each tab.
            public Fragment getItem(int tab) {
                return AboutTabFragment.createTab(tab);
            }
        }
    }
    

    AboutTabFragment.java is used to populate each tab. In my case, the first tab has a LinearLayout inside of a ScrollView and all the others have a WebView as the root layout.

    import android.os.Build;
    import android.os.Bundle;
    import android.support.v4.app.Fragment;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.webkit.WebView;
    import android.widget.TextView;
    
    public class AboutTabFragment extends Fragment {
        private int tabNumber;
    
        // AboutTabFragment.createTab stores the tab number in the bundle arguments so it can be referenced from onCreate().
        public static AboutTabFragment createTab(int tab) {
            Bundle thisTabArguments = new Bundle();
            thisTabArguments.putInt("Tab", tab);
            AboutTabFragment thisTab = new AboutTabFragment();
            thisTab.setArguments(thisTabArguments);
            return thisTab;
        }
    
        @Override
        public void onCreate (Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    
            // Store the tab number in tabNumber.
            tabNumber = getArguments().getInt("Tab");
        }
    
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
            View tabLayout;
    
            // Load the about tab layout.  Tab numbers start at 0.
            if (tabNumber == 0) {
                // Setting false at the end of inflater.inflate does not attach the inflated layout as a child of container.
                // The fragment will take care of attaching the root automatically.
                tabLayout = inflater.inflate(R.layout.about_tab_version, container, false);
            } else { // load a WebView for all the other tabs.  Tab numbers start at 0.
                // Setting false at the end of inflater.inflate does not attach the inflated layout as a child of container.
                // The fragment will take care of attaching the root automatically.
                tabLayout = inflater.inflate(R.layout.about_tab_webview, container, false);
                WebView tabWebView = (WebView) tabLayout;
    
                switch (tabNumber) {
                    case 1:
                    tabWebView.loadUrl("file:///android_asset/about_permissions.html");
                        break;
    
                    case 2:
                        tabWebView.loadUrl("file:///android_asset/about_privacy_policy.html");
                        break;
    
                    case 3:
                        tabWebView.loadUrl("file:///android_asset/about_changelog.html");
                        break;
    
                    case 4:
                        tabWebView.loadUrl("file:///android_asset/about_license.html");
                        break;
    
                    case 5:
                        tabWebView.loadUrl("file:///android_asset/about_contributors.html");
                        break;
    
                    case 6:
                        tabWebView.loadUrl("file:///android_asset/about_links.html");
                        break;
    
                    default:
                        break;
                }
            }
    
            return tabLayout;
        }
    }
    

    about_coordinatorlayout.xml is as follows:

    
    
    
        
        
    
            
            
    
                
                
    
                
            
    
            
            
        
    
    

    about_tab_version.xml is as follows:

    
    
    
        
    
            
    
        
    
    

    And about_tab_webview.xml:

    
    
    

    There are also entries in strings.xml

    About App
    Version
    Permissions
    Privacy Policy
    Changelog
    License
    Contributors
    Links
    

    And colors.xml

    #FF1976D2
    #FFBBDEFB
    #FFFFFFFF
    

    src/main/assets contains the HTML files referenced in AboutTabFragemnt.java.

提交回复
热议问题