XML布局
加入Fragment对应布局
<FrameLayout
android:id="@+id/realtabcontent"
android:layout_width="fill_parent"
android:layout_height="0dip"
android:layout_weight="1" />
加入FragmentTabHost对应布局
<android.support.v4.app.FragmentTabHost
android:id="@android:id/tabhost"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@color/whiteactionbar" >
<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_weight="0" />
</android.support.v4.app.FragmentTabHost>
程序代码
1、继承extends FragmentActivity
2、变量初始化:Fragment的Class与name
private boolean is2CallBack = false;//双击退出控制器
// 定义数组来存放Fragment界面
private Class fragmentArray[] = { FragmentPage1.class, FragmentPage2.class,
FragmentPage3.class, FragmentPage4.class, FragmentPage1.class };
// Tab选项卡的文字
private String mTextviewArray[] = { "发现", "九宫", "私人订制", "资讯", "工具" };
// 定义数组来存放按钮图片 tab选项卡上的图片
private int mImageViewArray[] = { R.drawable.yunshi_tab_faxian_btn,
R.drawable.yunshi_tab_jiugong_btn, R.drawable.yunshi_tab_siren_btn,
R.drawable.yunshi_tab_gaiyun_btn, R.drawable.yunshi_tab_gongju_btn };
3、FindView()找到FragmentTabHost对应元素
// 实例化布局对象
layoutInflater = LayoutInflater.from(this);
// 实例化TabHost对象,得到TabHost
mTabHost = (FragmentTabHost) findViewById(android.R.id.tabhost);
mTabHost.setup(this, getSupportFragmentManager(), R.id.realtabcontent);
4、装填FragmentTabHost
/**
* 初始化fragment控制组件
*/
private void initView() {
// 得到fragment的个数
int count = fragmentArray.length;
for (int i = 0; i < count; i++) {
// 为每一个Tab按钮设置图标、文字和内容
TabSpec tabSpec = mTabHost.newTabSpec(mTextviewArray[i])
.setIndicator(getTabItemView(i));
// 将Tab按钮添加进Tab选项卡中
mTabHost.addTab(tabSpec, fragmentArray[i], null);
// 设置Tab按钮的背景
// mTabHost.getTabWidget().getChildAt(0).setBackgroundResource(R.drawable.selector_tab_background);
}
//initviewshow();//自定义初始化的显示
}
/**
* 给Tab按钮设置图标和文字
*/
private View getTabItemView(int index) {
View view = layoutInflater.inflate(R.layout.yunshi_tab_item_view, null);
ImageView imageView = (ImageView) view.findViewById(R.id.imageview);
imageView.getLayoutParams().height = dip2px(YunShiActivity.this, 35);// 通过给它的属性赋值的方法可以解决问题
imageView.getLayoutParams().width = dip2px(YunShiActivity.this, 35);
imageView.setImageResource(mImageViewArray[index]);
TextView textView = (TextView) view.findViewById(R.id.textview);
textView.setText(mTextviewArray[index]);
return view;
}
public static int dip2px(Context context, float dipValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (dipValue * scale + 0.5f);
}
7、重载tabhost的点击函数,实现最左右按钮弹出slidingmenu
/**
* 设置点击函数
*/
private void initonclick() {
// TODO Auto-generated method stub
mTabHost.getTabWidget().getChildAt(0)
.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
menu.toggle();
}
});
mTabHost.getTabWidget().getChildAt(4)
.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
menu.showSecondaryMenu();
}
});
//```
}
6、程序中设置默认值fragment
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.yunshi);
//````
mTabHost.setCurrentTab(1);
initonclick();
//```
}
7、FragmentActivity与fragment的通信
FragmentActivity中获取对应的fragment实例
fragmentPage2 = (FragmentPage2) getSupportFragmentManager()
.findFragmentByTag(mTabHost.getCurrentTabTag());
// 设置键盘按键时间
public boolean dispatchKeyEvent(KeyEvent event) {
int keyCode = event.getKeyCode();
FragmentPage2 fragmentPage2 = null;
if (mTabHost.getCurrentTab() == 1)
fragmentPage2 = (FragmentPage2) getSupportFragmentManager()
.findFragmentByTag(mTabHost.getCurrentTabTag());
if (keyCode == KeyEvent.KEYCODE_BACK
&& event.getAction() != KeyEvent.ACTION_UP) {// 返回键点击的是返回键,并且不是抬起事件
if (event.getRepeatCount() == 0) {
if (menu.isMenuShowing() || menu.isSecondaryMenuShowing()) {// 侧边栏打开状态
if (menu.isMenuShowing())
menu.toggle();
else
menu.showContent();
return true;
} else if (mTabHost.getCurrentTab() == 1
&& fragmentPage2.isfiveShow) {//九宫tab,且在显示第五宫则返回之前页面
fragmentPage2.initview();
return true;
} else if (mTabHost.getCurrentTab() == 1
&& fragmentPage2.CurrentLevel > 1) {// 九宫tab的某一层
if (fragmentPage2.CurrentLevel < 5) {
fragmentPage2.CurrentString = fragmentPage2.BeforeString
.get(fragmentPage2.BeforeString.size() - 1);
fragmentPage2.BeforeString
.remove(fragmentPage2.BeforeString.size() - 1);
fragmentPage2.CurrentLevel--;
if (fragmentPage2.CurrentLevel == 1)
fragmentPage2.CurrentJiugong = "幸福";
fragmentPage2.getData();
fragmentPage2.initview();
} else if (fragmentPage2.CurrentLevel == 5) {
fragmentPage2.CurrentLevel--;
fragmentPage2.initview();
}
return true;
} else {
if (!is2CallBack) { //双击退出程序
is2CallBack = true;
Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT)
.show();
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
is2CallBack = false;
}
}, 2500);
return true;
} else {
DataCleanManager dm = new DataCleanManager();
dm.cleanInternalCache(YunShiActivity.this);
dm.cleanDatabases(YunShiActivity.this);
ExitManager.getInstance().exit();
}
}
}
}
return super.dispatchKeyEvent(event);
}
程序代码 SlidingMenu
1、引用slidingmenu_library项目作为自己的lib
2、XML:左右布局文件
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@id/menu_frameok"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/yunshi_menu_left_dashu"
android:padding="1.0dip" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<LinearLayout
android:id="@+id/leftmenu_denglu"
android:layout_width="fill_parent"
android:layout_height="0.0dip"
android:layout_weight="2.0"
android:background="#44d3d3d3"
android:orientation="vertical"
android:gravity="center"
android:clickable="true" >
<ImageView
android:id="@+id/imageView1"
android:layout_width="60.0dip"
android:layout_height="60.0dip"
android:src="@drawable/yunshi_login_touxiang_no" />
<TextView
android:id="@+id/username"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingTop="5.0dip"
android:text="@string/yunshi_left_menu_dlyzc"
android:textColor="@drawable/yunshi_menu_left_yanse_wenzi" />
</LinearLayout>
<View
android:layout_width="fill_parent"
android:layout_height="1.0dip"
android:layout_marginLeft="0.0dip"
android:layout_marginRight="0.0dip"
android:layout_marginTop="0.0dip"
android:background="#aaffffff" />
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="0.0dip"
android:layout_weight="3.0"
android:gravity="center_horizontal" >
<LinearLayout
android:id="@+id/leftmenu_yinanshoucang"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_weight="1.0"
android:clickable="true"
android:gravity="center_vertical"
android:orientation="vertical" >
<ImageView
android:id="@id/imageView2"
android:layout_width="50.0dip"
android:layout_height="50.0dip"
android:layout_gravity="center"
android:src="@drawable/yunshi_menu_left_yinan_image" />
<TextView
android:id="@id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text="@string/yunshi_left_menu_ynsc"
android:textColor="@drawable/yunshi_menu_left_yanse_wenzi" />
</LinearLayout>
<View
android:layout_width="1.0dip"
android:layout_height="fill_parent"
android:layout_marginLeft="0.0dip"
android:layout_marginRight="0.0dip"
android:layout_marginTop="0.0dip"
android:background="#aaffffff" />
<LinearLayout
android:id="@+id/leftmenu_meiwenshoucang"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_weight="1.0"
android:clickable="true"
android:gravity="center_vertical"
android:orientation="vertical" >
<ImageView
android:id="@id/imageView3"
android:layout_width="50.0dip"
android:layout_height="50.0dip"
android:layout_gravity="center"
android:src="@drawable/yunshi_menu_left_meiwen_image" />
<TextView
android:id="@id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text="@string/yunshi_left_menu_mwsc"
android:textColor="@drawable/yunshi_menu_left_yanse_wenzi" />
</LinearLayout>
</LinearLayout>
<View
android:layout_width="fill_parent"
android:layout_height="1.0dip"
android:layout_marginLeft="0.0dip"
android:layout_marginRight="0.0dip"
android:layout_marginTop="0.0dip"
android:background="#aaffffff" />
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="0.0dip"
android:layout_weight="3.0"
android:gravity="center_horizontal" >
<LinearLayout
android:id="@+id/leftmenu_jianchagengxin"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_weight="1.0"
android:clickable="true"
android:gravity="center_vertical"
android:orientation="vertical" >
<ImageView
android:id="@id/imageView4"
android:layout_width="50.0dip"
android:layout_height="50.0dip"
android:layout_gravity="center"
android:src="@drawable/yunshi_menu_left_gengxin_image" />
<TextView
android:id="@id/textView4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text="@string/yunshi_left_menu_jcgx"
android:textColor="@drawable/yunshi_menu_left_yanse_wenzi" />
</LinearLayout>
<View
android:layout_width="1.0dip"
android:layout_height="fill_parent"
android:layout_marginLeft="0.0dip"
android:layout_marginRight="0.0dip"
android:layout_marginTop="0.0dip"
android:background="#aaffffff" />
<LinearLayout
android:id="@+id/leftmenu_yijianfankui"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_weight="1.0"
android:clickable="true"
android:gravity="center_vertical"
android:orientation="vertical" >
<ImageView
android:id="@id/imageView5"
android:layout_width="50.0dip"
android:layout_height="50.0dip"
android:layout_gravity="center"
android:src="@drawable/yunshi_menu_left_fankui_image" />
<TextView
android:id="@id/textView5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text="@string/yunshi_left_menu_yjfk"
android:textColor="@drawable/yunshi_menu_left_yanse_wenzi" />
</LinearLayout>
</LinearLayout>
<View
android:layout_width="fill_parent"
android:layout_height="1.0dip"
android:layout_marginLeft="0.0dip"
android:layout_marginRight="0.0dip"
android:layout_marginTop="0.0dip"
android:background="#aaffffff" />
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="0.0dip"
android:layout_weight="3.0"
android:gravity="center_horizontal" >
<LinearLayout
android:id="@+id/leftmenu_guanyuwomen"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_weight="1.0"
android:clickable="true"
android:gravity="center_vertical"
android:orientation="vertical" >
<ImageView
android:id="@id/imageView6"
android:layout_width="50.0dip"
android:layout_height="50.0dip"
android:layout_gravity="center"
android:src="@drawable/yunshi_menu_left_guanyu_image" />
<TextView
android:id="@id/textView6"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:gravity="center_vertical"
android:text="@string/yunshi_left_menu_gywm"
android:textColor="@drawable/yunshi_menu_left_yanse_wenzi" />
</LinearLayout>
<View
android:layout_width="1.0dip"
android:layout_height="fill_parent"
android:layout_marginLeft="0.0dip"
android:layout_marginRight="0.0dip"
android:layout_marginTop="0.0dip"
android:background="#aaffffff" />
<LinearLayout
android:id="@+id/leftmenu_xitongshezhi"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_weight="1.0"
android:clickable="true"
android:gravity="center_vertical"
android:orientation="vertical" >
<ImageView
android:id="@id/imageView7"
android:layout_width="50.0dip"
android:layout_height="50.0dip"
android:layout_gravity="center"
android:src="@drawable/yunshi_menu_left_shezhi_image" />
<TextView
android:id="@id/textView7"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text="@string/yunshi_left_menu_xtsz"
android:textColor="@drawable/yunshi_menu_left_yanse_wenzi" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
</FrameLayout>
3、代码初始化
//屏幕宽度 计算阴影 slidingmenu出多少时使用
private void SlidingMenu() {
DisplayMetrics localDisplayMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(localDisplayMetrics);
this.vWidth = localDisplayMetrics.widthPixels;
}
private void initSlidingMenu() {
this.menu = new SlidingMenu(this);
// 设置侧滑栏菜单位置,这里在左边。拉动菜单时,会从左边弹出
this.menu.setMode(SlidingMenu.LEFT_RIGHT);
// 设置触摸的范围,这里设置全屏
this.menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
// 设置阴影的宽度,查看上面第二张效果图,靠右边的位置,有一个阴影过渡。就是这个东西
this.menu.setShadowWidthRes(R.dimen.shadow_width);
// 这里是阴影效果,可以设置图片或者一个颜色过渡
this.menu.setShadowDrawable(R.drawable.yunshi_menu_right_shadow);
// 设置后面间距,侧滑栏和原来界面间距
this.menu.setBehindOffsetRes(R.dimen.slidingmenu_offset);
this.menu.setBehindWidth((int) (0.75D * this.vWidth));
// 边框的角度,这里指边界地方
this.menu.setFadeDegree(0.35F);
// 侧滑栏的布局文件
View view= LayoutInflater.from(this).inflate(R.layout.yunshi_menu_frame_left, null);
view.setBackground(Constants.getleftdrawable(this));
this.menu.setMenu(view);
//this.menu.setSecondaryShadowDrawable(R.drawable.yunshi_menu_right_shadow);
View view2= LayoutInflater.from(this).inflate(R.layout.yunshi_menu_frame_right, null);
view2.setBackground(Constants.getrightdrawable(this));
this.menu.setSecondaryMenu(view2);
// 把侧滑栏关联到当前的Activity
this.menu.attachToActivity(this, 1);
}
4、代码控制——findview(),Listener, initonclick()
private void findView() {
//...
// 工具侧边栏
jinritianqi = (LinearLayout) findViewById(R.id.menuright_jinritianqi);
shenghuozhishu = (LinearLayout) findViewById(R.id.menuright_shenghuozhishu);
tianqiqushi = (LinearLayout) findViewById(R.id.menuright_tianqiqushi);
hunpeiceshi = (LinearLayout) findViewById(R.id.menuright_hunpeiceshi);
//···
}
private OnClickListener listener = new OnClickListener() {
@Override
public void onClick(View arg0) {
if (!ButtonUtil.isFastDoubleClick(arg0.getId())) {
switch (arg0.getId()) {
case R.id.menuright_jinritianqi:
// myapplicationintent=new Intent(MainTabActivity.this,
// cls);
Constants.ShowCodingDialog(YunShiActivity.this);
break;
//、、、
}
/**
* 设置点击函数
*/
private void initonclick() {
//、、、
jinritianqi.setOnClickListener(listener);
shenghuozhishu.setOnClickListener(listener);
tianqiqushi.setOnClickListener(listener);
hunpeiceshi.setOnClickListener(listener);
shengxiaoduiduipeng.setOnClickListener(listener);
shengxiaoyangsheng.setOnClickListener(listener);
shengxiaoyuncheng.setOnClickListener(listener);
xingzuoxingge.setOnClickListener(listener);
//、、、
}