[android更新类的内容开发APP]四、项目布局的基本功能(继续)
昨天,只拿到电脑,别说,眼泪
http://joveth.github.io/funny/
1.选项卡的滑动效果
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" > <TabHost
android:id="@+id/tab_host"
android:layout_width="match_parent"
android:layout_height="match_parent" > <LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" > <TabWidget
android:id="@android:id/tabs"
android:layout_width="match_parent"
android:layout_height="48dp"
android:background="@drawable/tab_widget_bg" /> <android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent" /> <!-- 隐藏 --> <FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="gone" > <fragment
android:id="@+id/fragment_image"
android:name="com.jov.germany.frame.ImageFrame"
android:layout_width="match_parent"
android:layout_height="match_parent" /> <fragment
android:id="@+id/fragment_text"
android:name="com.jov.germany.frame.TextFrame"
android:layout_width="match_parent"
android:layout_height="match_parent" /> <fragment
android:id="@+id/fragment_both"
android:name="com.jov.germany.frame.BothFrame"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</FrameLayout>
</LinearLayout>
</TabHost> </LinearLayout>
<?xml version="1.0" encoding="utf-8"?> <!-- 标签页tab 文字切换颜色 -->
<selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_selected="true" android:color="@color/color_orange"/> <item android:color="#000"/> </selector>
value/color.xml中加入:
<color name="color_orange">#FF9224</color>
为啥是橘黄,我……假设你不喜欢,百度HTML颜色代码表,找一个你 自己的最爱
package com.jov.germany; import java.util.ArrayList;
import java.util.List; import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TabHost;
import android.widget.TabHost.OnTabChangeListener;
import android.widget.TabHost.TabContentFactory;
import android.widget.TabHost.TabSpec;
import android.widget.TextView; public class MainActivity extends FragmentActivity {
public static final String PAGE1_ID = "page1";
public static final String PAGE2_ID = "page2";
public static final String PAGE3_ID = "page3"; private TabHost tabHost; // TabHost
private List<View> views; // ViewPager内的View对象集合
private FragmentManager manager; // Activity管理器
private ViewPager pager; // ViewPager @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); // 初始化资源
pager = (ViewPager) findViewById(R.id.viewpager);
tabHost = (TabHost) findViewById(R.id.tab_host);
manager = getSupportFragmentManager();
views = new ArrayList<View>(); views.add(manager.findFragmentById(R.id.fragment_image).getView());
views.add(manager.findFragmentById(R.id.fragment_text).getView());
views.add(manager.findFragmentById(R.id.fragment_both).getView()); // 管理tabHost開始
tabHost.setup(); // 传一个空的内容给TabHost,不能用上面两个fragment
TabContentFactory factory = new TabContentFactory() {
@Override
public View createTabContent(String tag) {
return new View(MainActivity.this);
}
};
// tab1
TabSpec tabSpec = tabHost.newTabSpec(PAGE1_ID);
tabSpec.setIndicator(createTabView(R.string.fragment_image_str));
tabSpec.setContent(factory);
tabHost.addTab(tabSpec);
// tab2
TabSpec tabSpec2 = tabHost.newTabSpec(PAGE2_ID);
tabSpec2.setIndicator(createTabView(R.string.fragment_text_str));
tabSpec2.setContent(factory);
tabHost.addTab(tabSpec2);
// tab3
TabSpec tabSpec3 = tabHost.newTabSpec(PAGE3_ID);
tabSpec3.setIndicator(createTabView(R.string.fragment_both_str));
tabSpec3.setContent(factory);
tabHost.addTab(tabSpec3); tabHost.setCurrentTab(0);
// 管理tabHost结束 // 设置监听器和适配器
pager.setAdapter(new PageAdapter());
pager.setOnPageChangeListener(new PageChangeListener());
tabHost.setOnTabChangedListener(new TabChangeListener());
} /**
* PageView Adapter
*
* @author Administrator
*
*/
private class PageAdapter extends PagerAdapter {
@Override
public int getCount() {
return views.size();
} @Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0 == arg1;
} @Override
public void destroyItem(ViewGroup view, int position, Object arg2) {
view.removeView(views.get(position));
} @Override
public Object instantiateItem(ViewGroup view, int position) {
try {
if (views.get(position).getParent() == null) {
view.addView(views.get(position));
} else {
((ViewGroup) views.get(position).getParent())
.removeView(views.get(position));
view.addView(views.get(position));
}
} catch (Exception e) {
e.printStackTrace();
}
return views.get(position);
}
} /**
* 标签页点击切换监听器
*
* @author Administrator
*
*/
private class TabChangeListener implements OnTabChangeListener {
@Override
public void onTabChanged(String tabId) {
if (PAGE1_ID.equals(tabId)) {
pager.setCurrentItem(0);
} else if (PAGE2_ID.equals(tabId)) {
pager.setCurrentItem(1);
} else if (PAGE3_ID.equals(tabId)) {
pager.setCurrentItem(2);
}
}
} /**
* ViewPager滑动切换监听器
*
* @author Administrator
*
*/
private class PageChangeListener implements OnPageChangeListener {
@Override
public void onPageScrollStateChanged(int arg0) {
} @Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
} @Override
public void onPageSelected(int arg0) {
tabHost.setCurrentTab(arg0);
}
} /**
* 创建tab View
*
* @param string
* @return
*/
private View createTabView(int stringId) {
View tabView = getLayoutInflater().inflate(R.layout.tab, null);
TextView textView = (TextView) tabView.findViewById(R.id.tab_text);
textView.setText(stringId);
return tabView;
} @Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
} @Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
当中的layout/tab.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="@drawable/state_tabs_bg" > <TextView
android:id="@+id/tab_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="11dp"
android:layout_gravity="center_horizontal"
android:textSize="18sp"
android:textColor="@color/tab_widget_text"/> </LinearLayout>
drawable/state_tabs_bg.xml
<?xml version="1.0" encoding="utf-8"? > <!-- tab每一个标签背景 -->
<selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_selected="true" android:drawable="@drawable/tabs_selected_bg" /> <item android:drawable="@drawable/tabs_normal_bg"></item> </selector>
drawable/tabs_selected_bg.xml
<?xml version="1.0" encoding="UTF-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" > <item>
<shape>
<solid android:color="@color/color_orange" />
</shape>
</item>
<item android:bottom="5dp">
<shape>
<solid android:color="#eeeeee" />
</shape>
</item> </layer-list>
drawable/tabs_normal_bg.xml
<?xml version="1.0" encoding="UTF-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item>
<shape>
<solid android:color="@color/color_orange" />
</shape>
</item>
<item android:bottom="1dp">
<shape>
<solid android:color="#eeeeee" />
</shape>
</item> </layer-list>
package com.jov.germany.frame; import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup; import com.jov.germany.R; public class ImageFrame extends Fragment{
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.image_frame, container, false);
}
}
你可能会认为没什么差别,看一下我们的Fragment引用的包,不一样哦。
近期各种忙,更新的 有点慢,没办法啊
版权声明:本文博客原创文章,博客,未经同意,不得转载。
[android更新类的内容开发APP]四、项目布局的基本功能(继续)的更多相关文章
- Android系统移植与驱动开发--第四章
第四章 源代码的下载和编译 一个android内核相当于4G,而一个Linux内个只有几百M,Linux内核相对于android内核来说实在是小巫见大巫.了解android源代码不一定要详细了解,只去 ...
- 【Android】13.0 UI开发(四)——列表控件RecyclerView的横向布局排列实现
1.0 新建项目,由于ListView的局限性,RecyclerView是一种很好取代ListView的控件,可以灵活实现多种布局. 2.0 新建项目RecyclerviewTest,目录如下: 3. ...
- 深入浅出 - Android系统移植与平台开发(四)- Android启动流程
作者:唐老师,华清远见嵌入式学院讲师. 一.Android init进程启动 还是从Linux的启动开始吧.Linux被bootloader加载到了内存之后,开始运行,在初始化完 Linux运行环境之 ...
- H5 + 开发App(分享功能)
我们开发App有一个不可少的功能,就是分享功能.让用户将app分享到他的社交圈.比如微信 QQ 微博等等. 准备工作:我们要先去申请相关的权限, 这是传送门http://ask.dcloud.net. ...
- VS2013开发Windows服务项目
这篇随笔里,我将介绍如何用VS2013开发Windows服务项目,实现的功能是定时发送电子邮件. 开发环境:VS2013,SQL Server2008,采用C#语言开发 步骤一:创建Windows服务 ...
- 基于.NetCore开发博客项目 StarBlog - (2) 环境准备和创建项目
系列文章 基于.NetCore开发博客项目 StarBlog - (1) 为什么需要自己写一个博客? 基于.NetCore开发博客项目 StarBlog - (2) 环境准备和创建项目 ... 基于. ...
- 基于.NetCore开发博客项目 StarBlog - (3) 模型设计
系列文章 基于.NetCore开发博客项目 StarBlog - (1) 为什么需要自己写一个博客? 基于.NetCore开发博客项目 StarBlog - (2) 环境准备和创建项目 基于.NetC ...
- mui开发app之自定义事件以更新其他页内容
我之前做过jquery mobile的开发,那还是前年的事情 在jquery mobile中,由于页面是存储在div[data-role=page]的dom中(jqmobile通过对data-role ...
- Cordova开发App入门之创建android项目
Apache Cordova是一个开源的移动开发框架.允许使用标准的web技术-HTML5,CSS3和JavaScript做跨平台开发. 应用在每个平台的具体执行被封装了起来,并依靠符合标准的API绑 ...
随机推荐
- Custom Media Player in WPF (Part 1)
First of all I would like to welcome everyone to my new blog and wish you all a happy new year… Thro ...
- struts2原理分析
正在使用struts之前,我们必须明白servlet执行.因为不管什么J2EE框架支持servlet的. 和servlet正在运行的进程.简单地说,例如,下面的: 1.server接收请求 2.一个过 ...
- 【iOS】使用SQLite与FMDB
iOS中的SQLite与Android中的一模一样,仅仅是调用方法有差异.假设单从调用来讲,Android封装的一套helper更好用一些,而iOS原生的用C语言的几个函数在操作,比較麻烦.只是引入第 ...
- Hibernate Tomcat JNDI数据源配置(转)
简述: 配置JNDI 查找Tomcat 中server.xml中定义的数据源 步骤: 1. 修改elipse的数据源server.xml 主要修改如下, 1. 添加下面这段Context文本 其中St ...
- 1008: University
&method=showdetail&id=1008" style="background-color:rgb(255,0,0)">台州ACM:10 ...
- 趣味Java算法题(附答案)
[程序1] 题目:古典问题:有一对兔子,从出生后第3个月起每一个月都生一对兔子,小兔子长到第三个月后每一个月又生一对兔子,假如兔子都不死,问每一个月的兔子总数为多少? //这是一个菲波拉契 ...
- sublime配置攻略
大家好,今天给大家分享的编辑器:sublime text2 我用过非常多编辑器, EditPlus.EmEditor.Notepad++.Notepad2.UltraEdit.Editra.V ...
- 【Linux】lvm基础操作
新增两块硬盘,来进行实验: [root@jp ~]# fdisk -l Disk /dev/sda: 107.3 GB, 107374182400 bytes 255 heads, 63 sector ...
- UVA 11149 - Power of Matrix(矩阵乘法)
UVA 11149 - Power of Matrix 题目链接 题意:给定一个n*n的矩阵A和k,求∑kiAi 思路:利用倍增去搞.∑kiAi=(1+Ak/2)∑k/2iAi,不断二分就可以 代码: ...
- WebAPI通过multipart/form-data方式同时上传文件以及数据(含HttpClient上传Demo)
简单的Demo,用于了解WebAPI如何同时接收文件及数据,同时提供HttpClient模拟如何同时上传文件和数据的Demo,下面是HttpClient上传的Demo界面 1.HttpClient部分 ...