TabLayout 代码布局以及一些小问题

TabLayout是2015发布在Design Support Library中的一个组件。

最近用TabLayout进行代码布局的时候发现一个不大不小的问题。

首先介绍如何对TabLayout进行代码布局:

首先要有一个FragmentActivity:

package com.example.testapp;

import android.annotation.TargetApi;
import android.content.Context;
import android.graphics.Color;
import android.os.Build;
import android.os.Bundle;
import android.support.design.widget.TabLayout;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.ViewPager;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;

/**
 * Created by SXT on 2016/3/25.
 */
public class TabViewPager4 extends FragmentActivity{
    private SimpleFragmentAdapter pagerAdapter;

    private ViewPager viewPager;

    private TabLayout tabLayout;

    private LinearLayout linearLayout;

    private Context mContext;

    @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        this.mContext = this;

        linearLayout = new LinearLayout(mContext);
        linearLayout.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
        linearLayout.setOrientation(LinearLayout.VERTICAL);

        tabLayout = new TabLayout(mContext);
        tabLayout.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT));

        viewPager = new ViewPager(this);
        viewPager.setId(View.generateViewId());
        //1.0f weight
        viewPager.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 0, 1.0f));
        viewPager.setBackgroundColor(Color.WHITE);
        linearLayout.addView(tabLayout);
        linearLayout.addView(viewPager);

        pagerAdapter = new SimpleFragmentAdapter(getSupportFragmentManager(), this);
        viewPager.setAdapter(pagerAdapter);
        tabLayout.setupWithViewPager(viewPager);
//        tabLayout.post(new Runnable() {
//            @Override
//            public void run() {
//                tabLayout.setupWithViewPager(viewPager);
//            }
//        });
        tabLayout.setSelectedTabIndicatorColor(Color.BLUE);//tabLayout标签条颜色
        tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);//tabLayout对齐方式,必须将tabMode设置为MODE_FIXED才有效
        tabLayout.setTabMode(TabLayout.MODE_FIXED);//有两种模式,MODE_FIXED表示固定tabs,并同时显示所有的tabs。

//MODE_SCROLLABLE:可滚动tabs,显示一部分tabs,在这个模式下能包含长标签和大量的tabs,最好用于用户不需要直接比较tabs。

        setContentView(linearLayout);
    }

}

  FragmentPagerAdapter:

package com.example.testapp;

import android.content.Context;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;

/**
 * Created by SXT on 2016/3/25.
 */
public class SimpleFragmentAdapter extends FragmentPagerAdapter {

    final int PAGE_COUNT = 3;
    private String tabTitles[] = new String[]{"tab1","tab2","tab3"};
    private Context mContext;

    public SimpleFragmentAdapter(FragmentManager fm, Context context) {
        super(fm);
        this.mContext = context;
    }

    @Override
    public Fragment getItem(int position) {
        return PageFragment4.newInstance(position + 1,mContext);
    }

    @Override
    public int getCount() {
        return PAGE_COUNT;
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return tabTitles[position];
    }
}

  Fragment:

package com.example.testapp;

import android.content.Context;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.TextView;

/**
 * Created by SXT on 2016/3/25.
 */
public class PageFragment4 extends Fragment {
    private static final String ARG_PAGE = "ARG_PAGE";
    private static Context mContext = null;
    private int mPage;
    public static PageFragment4 newInstance(int page, Context context){
        mContext = context;
        Bundle args = new Bundle();
        args.putInt(ARG_PAGE, page);
        PageFragment4 pageFragment = new PageFragment4();
        pageFragment.setArguments(args);
        return pageFragment;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mPage = getArguments().getInt(ARG_PAGE);
    }

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

        LinearLayout linearLayout = new LinearLayout(mContext);
        linearLayout.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT));
        linearLayout.setOrientation(LinearLayout.VERTICAL);
        TextView textView = new TextView(mContext);
        textView.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT));
        textView.setGravity(Gravity.CENTER);
        textView.setText("Fragment #" + mPage);
        linearLayout.addView(textView);
        return linearLayout;
    }

}

  完全没有涉及到Xml文件布局,但是在使用代码布局中有一个需要注意的地方,在FragmentActivity中,必须要为viewPager.setId(View.generateViewId());如果没有这句代码那么每个Tab间移动的时候非常缓慢,而且不显示Viewpager中的内容。

另外,在为viewpager setId的时候,如果setId的参数是除零以外的其他数,则会报错(android studio会报错,eclipse不会)。据说这是因为防止Id冲突。为了解决这个问题,有两种方法:

一、使用上述viewPager.setId(View.generateViewId());的方法

二、新建一个id.xml存放id值,用R.id获取

时间: 2024-08-28 20:48:08

TabLayout 代码布局以及一些小问题的相关文章

【转】一个DIV+CSS代码布局的简单导航条

原文地址:http://www.divcss5.com/shili/s731.shtml 简单的DIV CSS代码布局实现导航条 一个蓝色主题的导航条布局案例,本CSS小实例,采用DIV CSS实现.同时不用图片做背景,直接使用背景色实现,鼠标经过悬停对应栏目名称是对应背景蓝色变深. 导航条部分效果截图 一般导航条采用ul li列表布局,这里也不例外DIVCSS5实例也采用列表标签ul li+ CSS布局. 一.布局思维思考   -   TOP 在实际DIV+CSS布局项目中,一般不会只使用一次

OC iOS开发 代码布局

代码布局抛弃storyboard,用代码生成界面,它的优劣不谈 首先在项目设置中,更改应用的“入口” 不选main,清空它 然后在AppDelegate.m中,更改(添加内容),别忘了import 1 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 2 // Override point for customization

AutoLayout代码布局使用大全—一种全新的布局思想

相信ios8出来之后,不少的ios程序员为了屏幕的适配而烦恼.相信不少的人都知道有AutoLayout 这么个玩意可以做屏幕适配,事实上,AutoLayout不仅仅只是一个为了多屏幕适配的工具, 它真正的意义所在是给了程序员一种全新的布局思想. 本文主要依据真实项目实例从三个方向全方位讲解AutoLayout的使用大全. 一.AutoLayout布局原理和语法 二.约束冲突和AutoLayout动画处理 三.AutoLayout布局思想,约束链的控制. 本文讲解的内容和代码主要依赖于一个名为UI

复杂的代码布局

今天研究了一下全代码布局,使用了TextView.EditText.ScrollView.Spinner.ArrayAdapter.LinearLayout.RelativeLayout.ExpandableListView.BaseExpandableListAdapter等控件,其中ExpandableListView是属于复杂的控件. 效果图如下: 关键代码如下: package com.example.mytest; import java.util.ArrayList; import

CardLayout布局练习(小的图片浏览器)

1 /* 2 涉及Panel中的图片的加载,还有Frame的关闭的方法, CardLayout(int hgap, int vgap)就会决定卡片面板的大小 3 匿名类的使用... 4 */ 5 import java.awt.*; 6 import java.awt.event.*; 7 import javax.swing.*; 8 public class CardLayoutDemo extends Frame{ 9 Panel pCards=new Panel();//卡片面板 10

对编写html代码的几点儿小建议

1.DOCTYPE说明:告诉浏览器要使用哪种规范来解释该文档内容: <!DOCTYPE html PUBLIC "-W3//DTD//XHTML 1.0  Transitional//EN"  "http://www.w3.org/1999/xhmlt"> 解释:-W3:w3标准:DTD:文档类型定义: XHTML 1.0:XHTML 1.0版本:Transitional:过渡模式(Strict:严格模式):EN:语言为英语: "http://

002.[python学习]python编码规范pep8学习——PEP8第一部分代码布局

关于PEP8的详细说明可以参考官方原文:http://legacy.python.org/dev/peps/pep-0008/ 我参考官方文档及其他文章,摘出相关内容而得此文章,具体参考其他文章见文中最后参考资料处. 当想要让自己所写的代码为更多人使用.交流学习时,不能写出只有机器认识的代码,而是对于人而言具有良好的可读性,此时就需要遵从一个公共的约束来规范自己的代码,那么<Style Guide for Python Code(PEP8)>是个很好的选择. 首先PEP8中声明,有以下有理由忽

IOS开发UI篇--UITableView的自定义布局==纯代码布局

UITableView中除了利用系统的UItableViewCell不能完成需求进行布局时,还可以进行自定义布局: 自定义布局分为两类:(1)利用代码进行创建 (2)利用xib进行实现: 下面对利用代码进行创建分析: 应用场景:像微博,等列表数据展示(由于微博的每个单元格的数据大小不一致,所以得计算每个单元格的大小) 分析:前提是获取列表数据,然后建立每个单元格的模型(建立单元格模型应继承UITableViewCell)复写 - (id)initWithStyle:(UITableViewCel

Html5游戏开发-145行代码完成一个RPG小Demo

lufy前辈写过<[代码艺术]17行代码的贪吃蛇小游戏>一文,忽悠了不少求知的兄弟进去阅读,阅读量当然是相当的大.今天我不仿也搞一个这样的教程,目地不在于忽悠人,而在于帮助他人. 先看demo效果图: 测试URL: http://www.cnblogs.com/yorhom/articles/3157553.html 关注我的blog的人不仿会看到我最近发布了新引擎lufylegendRPG 1.0.0,今天就算来推广一下这个引擎吧.也好让大家见证一下封装的力量. 引擎下载地址:http://