
有时候在一些子页面或者内容页面,不需要显示ActionBar的标题栏图标。可用如下方式进行设置。
首先获取到ActionBar对象
ActionBar actionBar=getActionBar();
使用android:logo属性。不像方方正正的icon,logo的图像不会有任何宽度限制。
logo图像典型的给你的APP提供品牌。当有Logo的时候,可以隐藏label。
默认的,ActionBar使用Activity的android:icon属性,还有一致的android:label属性。
隐藏Label标签:actionBarsetDisplayShowTitleEnabled(false);
隐藏logo和icon:actionBarsetDisplayShowHomeEnabled(false);
设置标题,一个主标题,一个子标题
actionBarsetSubtitle(“Inbox”);
actionBarsetTitle(“Label:important”);
默认的ActionBar的背景颜色取决于activity指定的Theme。Holo Theme它的背景是黑色的。
可以指定任意的Drawabel对象作为背景,使用setBackgroundDrawable方法:
ActionBar actionBar = getActionBar();
Resources r = getResources();
Drawable myDrawable = rgetDrawable(Rdrawablegradient_header);
actionBarsetBackgroundDrawable(myDrawable);
注意:ActionBar会自动缩放你的背景图
覆盖模式
默认情况下,actionBar放在activity的顶部,且作为activity布局的一部分。设置成为覆盖模式后,actionBar相当于漂浮在activity之上,不干预activity的布局。设置如下:
@Override
public void onCreate(Bundle savedInstanceState) {
superonCreate(savedInstanceState);
getWindow()requestFeature(WindowFEATURE_ACTION_BAR_OVERLAY);
setContentView(Rlayoutmain);
}
看你的布局文件,parentgetChildAt(groupPosition)获取的是Linearlayout,同理LinearlayoutgetChildAt(groupPosition)获取的是Linearlayout的子标签!每个item都应该有一个布局文件,做布局,根元素标签就是你的Linearlayout!希望对你有所帮助!
首先,要使用该控件就需要添加design library,在android studio(还没有使用Android studio的小伙伴们要赶紧更换啦)中添加依赖
compile ‘comandroidsupport:design:2220’
然后再布局文件中使用TabLayout
<androidsupportdesignwidgetTabLayout
android:id="@+id/tablayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true" />12345
紧接着在下面添加ViewPager
<androidsupportv4viewViewPager
android:id="@+id/view_pager"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/tablayout" />12345
布局文件完成了,接下来去定义ViewPager中的适配器,这里我使用的是Fragment,所以继承自FragmentPagerAdapter ,代码如下:
public class MyPageAdapter extends FragmentPagerAdapter {
ArrayList<Fragment> datas;
ArrayList<String> titles;
public CommunityPageAdapter(FragmentManager fm) {
super(fm);
}
public void setData(ArrayList<Fragment> datas) {
thisdatas = datas;
}
public void setTitles(ArrayList<String> titles) {
thistitles = titles;
}
@Override
public Fragment getItem(int position) {
return datas == null null : datasget(position);
}
@Override
public int getCount() {
return datas == null 0 : datassize();
}
@Override
public CharSequence getPageTitle(int position) {
return titles == null null : titlesget(position);
}
}12345678910111213141516171819202122232425262728293031
适配器中需要两个数据集合,分配填充Fragment和显示的标题。
然后在需要使用的页面添加如下代码:
MyPageAdapter myPageAdapter = new MyPageAdapter(getFragmentManager());
ArrayList<Fragment> datas = new ArrayList<Fragment>();
datasadd(new AFragment());
datasadd(new BFragment());
datasadd(new CFragment());
myPageAdaptersetData(datas);
ArrayList<String> titles = new ArrayList<String>();
titlesadd("A");
titlesadd("B");
titlesadd("C");
myPageAdaptersetTitles(titles);12345678910111213
现在适配器和数据已经准备好了,那么接下来就是要把数据放入ViewPager中,并使ViewPager和TabLayout相关联:
TabLayout tabLayout = (TabLayout) findViewById(Ridtablayout);
ViewPager viewPager = (ViewPager) findViewById(Ridview_pager);
// 将适配器设置进ViewPager
viewPagersetAdapter(myPageAdapter);
// 将ViewPager与TabLayout相关联
tabLayoutsetupWithViewPager(viewPager);123456
关联之后运行发现,其实ViewPager由于预加载机制,导致每次都会提前加载下一个页面,如果页面的数据量大,那么这将会占用大量的内存,有什么办法可以只加载当前显示的页面呢看
通过查找相关资料发现,有一个方法setOffscreenPageLimit(int),该方法的作用是设置提前加载页面的数量,尝试使用viewPagersetOffscreenPageLimit(0);后发现无效。
继续查阅资料后发现,原来这是由于ViewPager的机制导致的,最少需要预加载一个页面,Requested offscreen page limit 0 too small; defaulting to 1,相关问题链接:
发现了可以完美解决该问题的方法:
在Fragment中有一个方法,setUserVisibleHint,该方法可以获取当前页面的展示情况
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
supersetUserVisibleHint(isVisibleToUser);
if (isVisibleToUser) {
// 页面正在展示,在这里加载你的数据
}else{
// 页面没有展示
}
}12345678910
基本到这一步功能已经实现了,但是,还有一些细节需要注意,到底ViewPager滑动的时候为什么会造成TabLayout的标题也随之更换呢看原来setupWithViewPager被调用的时候,执行了下面的代码
viewPageraddOnPageChangeListener(new TabLayoutTabLayoutOnPageChangeListener(this));
thissetOnTabSelectedListener(new TabLayoutViewPagerOnTabSelectedListener(viewPager));
到最后,还有一个问题,那么就是如果我们的标题有多条,导致超出了TabLayout的显示范围,这该如何解决呢看很简单,查阅官方API发现,TabLayout有一个方法是setTabMode,它是用来设置TabLayout的展示模式,而这个方法接受两个常量,MODE_SCROLLABLE 以及 MODE_FIXED,显而易见,当我们设置为MODE_SCROLLABLE 它就能自动根据标题的数量,滑动展示啦,功能到这里就完美实现了!
首先,要使用该控件就需要添加design library,在android studio(还没有使用Android studio的小伙伴们要赶紧更换啦)中添加依赖
compile ‘comandroidsupport:design:2220’
然后再布局文件中使用TabLayout
<androidsupportdesignwidgetTabLayout
android:id="@+id/tablayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true" />12345
紧接着在下面添加ViewPager
<androidsupportv4viewViewPager
android:id="@+id/view_pager"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/tablayout" />12345
布局文件完成了,接下来去定义ViewPager中的适配器,这里我使用的是Fragment,所以继承自FragmentPagerAdapter ,代码如下:
public class MyPageAdapter extends FragmentPagerAdapter {
ArrayList<Fragment> datas;
ArrayList<String> titles;
public CommunityPageAdapter(FragmentManager fm) {
super(fm);
}
public void setData(ArrayList<Fragment> datas) {
thisdatas = datas;
}
public void setTitles(ArrayList<String> titles) {
thistitles = titles;
}
@Override
public Fragment getItem(int position) {
return datas == null null : datasget(position);
}
@Override
public int getCount() {
return datas == null 0 : datassize();
}
@Override
public CharSequence getPageTitle(int position) {
return titles == null null : titlesget(position);
}
}12345678910111213141516171819202122232425262728293031
适配器中需要两个数据集合,分配填充Fragment和显示的标题。
然后在需要使用的页面添加如下代码:
MyPageAdapter myPageAdapter = new MyPageAdapter(getFragmentManager());
ArrayList<Fragment> datas = new ArrayList<Fragment>();
datasadd(new AFragment());
datasadd(new BFragment());
datasadd(new CFragment());
myPageAdaptersetData(datas);
ArrayList<String> titles = new ArrayList<String>();
titlesadd("A");
titlesadd("B");
titlesadd("C");
myPageAdaptersetTitles(titles);12345678910111213
现在适配器和数据已经准备好了,那么接下来就是要把数据放入ViewPager中,并使ViewPager和TabLayout相关联:
TabLayout tabLayout = (TabLayout) findViewById(Ridtablayout);
ViewPager viewPager = (ViewPager) findViewById(Ridview_pager);
// 将适配器设置进ViewPager
viewPagersetAdapter(myPageAdapter);
// 将ViewPager与TabLayout相关联
tabLayoutsetupWithViewPager(viewPager);123456
关联之后运行发现,其实ViewPager由于预加载机制,导致每次都会提前加载下一个页面,如果页面的数据量大,那么这将会占用大量的内存,有什么办法可以只加载当前显示的页面呢?
通过查找相关资料发现,有一个方法setOffscreenPageLimit(int),该方法的作用是设置提前加载页面的数量,尝试使用viewPagersetOffscreenPageLimit(0);后发现无效。
继续查阅资料后发现,原来这是由于ViewPager的机制导致的,最少需要预加载一个页面,Requested offscreen page limit 0 too small; defaulting to 1,相关问题链接:>
在项目中使用Fragment和viewPager是很常见的事情,但是细心的人就会发现如果fragment有多个页面的话,当你还没切换到第二个页面的时候viewpager就已经把第二个页面在后台加载了,这个是viewpager的特性。
举个简单的例子:你在页面加个progressBar,让他显示一秒再消失,但是你打开App,然后等两秒,再切换到第二个页面,这个时候就会发现progressbar早已经消失了。
阅读viewpager的源码就会发现有这个方法setOf'fscreenPageLimit();
这个就是控制viewpager一次加载几个页面的方法,看原源码就会发现就算你传0,viewpager也会默认为1,通过修改viewpager可以实现不预加载,但是以后SDK更新的话你就用不到新东西,这个方法明显是不理想的
[java] view plain copy
public void setOffscreenPageLimit(int limit) {
if (limit < DEFAULT_OFFSCREEN_PAGES) {
Logw(TAG, "Requested offscreen page limit " + limit + " too small; defaulting to " +
DEFAULT_OFFSCREEN_PAGES);
limit = DEFAULT_OFFSCREEN_PAGES;
}
if (limit != mOffscreenPageLimit) {
mOffscreenPageLimit = limit;
populate();
}
}
DFEAULT_OFFSCREEN_RAGES这个变量是1
再来看看Fragment的API,setUserVisibleHint这个方法告诉我们Fragment的UI是否是可见的。
很明显从这里下手可以得到想要的结果。
Demo采用了TabLayout和viewpager结合滑动效果
这里在絮叨一下TabLayout,tabMode有两个属性,一个是fixed,另一个是scrollable,前者是不管有几个tab,只占一个屏幕的宽度,后者自适应屏幕的宽度,滑动显示tab
现在想要的结果是切换哪个页面再加载哪个页面的数据为了效果明显加一个进度显示,这样很直观就可以看出来
这个是主页面的xml
[html] view plain copy
<xml version="10" encoding="utf-8">
<LinearLayout xmlns:android=">
$('#tabs')tabs({
border:false,
onSelect:function(title,index){
if(index==0){
}else if(index==1){
showcjbqGridList(); // 载入场景标签-自变量数据
}else if(index==2){
showybjGridList(); // 载入数据集-样本集
}else{
showSexList();
showHistoryList();
}
}
});
用tabs的id,能拿到index,获取到tab页的index
1、在TabLayout 中setMode(TabLayoutMODE_SCROLLABLE) 就可以啦,跟随内容的而变化 。
2、如果需要下载软件应用,建议您尝试:
使用本机软件市场进行下载;
使用手机功能表中自带的浏览器上网,直接搜索需要的软件进行下载安装;
使用电脑下载APK格式的安装包,连接数据线传输至手机, *** 作手机在应用程序-我的文件中找到安装包,运行后点击安装按钮;
先下载一个市场类软件,常见的有安卓市场,机锋市场等等,之后使用此款软件下载其他程序,但是可能消耗流量较大,建议您在连接无线网的情况下使用。
以上就是关于如何设置图标,标题栏为TabLayout每个Activity全部的内容,包括:如何设置图标,标题栏为TabLayout每个Activity、android design.tablayout怎么得到每个子view、android drawerlayout被tablayout覆盖等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)