- 浏览: 332104 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
xuanyuanxiaoxue:
...
Android - LayoutInflater -
柴兴博:
不错 多谢
Android 悬浮Activity并可拖动(访悬浮歌词) -
di1984HIT:
写的很好,我收藏一下。
java之动态代理模式(JDK和cglib) -
chinacssnj:
待测试,明天测,测试的结果发给大家
网络开发上传文件到服务器 -
fx_199182:
...
Android之MediaPlayer
之前一直认为TabHost不够灵活而使用ActivityGroup。看到了一个利用反射来控制TabHost的例子
先通过
tabHost.newTabSpec(CagConstant.TAB_TAG_CHANGE_INFO); tabHost.newTabSpec(CagConstant.TAB_TAG_ROUTE_INFO); tabHost.newTabSpec(CagConstant.TAB_TAG_STATION_INFO);
来获得TabSpec单个按钮的对象,之后setContent(ViewId)来设置选中状态效果。接下来通过反射
tabWidget.getClass().getDeclaredField("mBottomLeftStrip"); tabWidget.getClass().getDeclaredField("mBottomRightStrip"); (2.2之后改为mLeftStrip,mRightStrip)
得到TabSpec左右两侧按钮的Field对象。然后解除访问限制setAccessible(true);设置未被选中时的背景。点击事件按钮背景的变化是通过for循环来判断的,个人感觉还有可以改进的地方。
package com.CustomTabhost; import java.lang.reflect.Field; import com.tab.R; import android.app.TabActivity; import android.content.Intent; import android.os.Build; import android.os.Bundle; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.widget.TabHost; import android.widget.TabHost.OnTabChangeListener; import android.widget.TabWidget; import android.widget.TextView; public class CustomTabhost extends TabActivity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); int width = 45; int height = 30; final TabHost tabs = getTabHost(); final TabWidget tabWidget = tabs.getTabWidget(); //-----------------------------若是继承自Activity OR ActivityGroup----------------------- // TabHost tabHost=(TabHost)findViewById(R.id.tabhost); // tabs.addTab(tabs.newTabSpec("first tab").setIndicator("信息").setContent(new Intent(CustomTabhost.this, Load.class))); // 注意此处我们用的是setContent(new Intent(CustomTabhost.this, Load.class)) // 那么tabHost.setup(this.getLocalActivityManager());必须继承ActivityGroup // 若是用的是类似:mTabHost.addTab(mTabHost.newTabSpec("tab_test1").setIndicator("TAB a").setContent(R.id.LinearLayout01)); // 则应该用tabHost.setup(); 可以继承自Activity OR ActivityGroup // TabWidget tabWidget = tabs.getTabWidget();//此句话应该在setup方法后面,不然会为null,若是继承自TabActivity则不用考虑因为TabActivity已经帮我们封装实现了 //--------------------------------------------------------------------------------------- Field mBottomLeftStrip; Field mBottomRightStrip; // LayoutInflater.from(this).inflate(R. layout.loading, // tabs.getTabContentView(), true); tabs.addTab(tabs.newTabSpec("first tab").setIndicator("信息").setContent( new Intent(CustomTabhost.this, Load.class))); tabs.addTab(tabs.newTabSpec("second tab").setIndicator("收藏") .setContent(new Intent(CustomTabhost.this, Load.class))); tabs.addTab(tabs.newTabSpec("second tab").setIndicator("设置") .setContent(new Intent(CustomTabhost.this, Load.class))); tabs.setCurrentTab(1); for (int i = 0; i < tabWidget.getChildCount(); i++) { /** * 设置高度、宽度,不过宽度由于设置为fill_parent,在此对它没效果 */ tabWidget.getChildAt(i).getLayoutParams().height = height; tabWidget.getChildAt(i).getLayoutParams().width = width; /** * 设置tab中标题文字的颜色,不然默认为黑色 */ final TextView tv = (TextView) tabWidget.getChildAt(i) .findViewById(android.R.id.title); tv.setTextColor(this.getResources().getColorStateList( android.R.color.white)); /** * 此方法是为了去掉系统默认的色白的底角 * * 在 TabWidget中mBottomLeftStrip、mBottomRightStrip * 都是私有变量,但是我们可以通过反射来获取 * * 由于还不知道Android 2.2的接口是怎么样的,现在先加个判断好一些 */ if (Integer.valueOf(Build.VERSION.SDK) <= 7) { try { mBottomLeftStrip = tabWidget.getClass().getDeclaredField( "mBottomLeftStrip"); mBottomRightStrip = tabWidget.getClass().getDeclaredField( "mBottomRightStrip"); if (!mBottomLeftStrip.isAccessible()) { mBottomLeftStrip.setAccessible(true); } if (!mBottomRightStrip.isAccessible()) { mBottomRightStrip.setAccessible(true); } mBottomLeftStrip.set(tabWidget, getResources().getDrawable( R.drawable.no)); mBottomRightStrip.set(tabWidget, getResources() .getDrawable(R.drawable.no)); } catch (Exception e) { e.printStackTrace(); } } else { try { mBottomLeftStrip = tabWidget.getClass().getDeclaredField( "mLeftStrip"); mBottomRightStrip = tabWidget.getClass().getDeclaredField( "mRightStrip"); if (!mBottomLeftStrip.isAccessible()) { mBottomLeftStrip.setAccessible(true); } if (!mBottomRightStrip.isAccessible()) { mBottomRightStrip.setAccessible(true); } mBottomLeftStrip.set(tabWidget, getResources().getDrawable( R.drawable.no)); mBottomRightStrip.set(tabWidget, getResources() .getDrawable(R.drawable.no)); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } View vvv = tabWidget.getChildAt(i); if (tabs.getCurrentTab() == i) { vvv.setBackgroundDrawable(getResources().getDrawable( R.drawable.navbgfocus)); } else { vvv.setBackgroundDrawable(getResources().getDrawable( R.drawable.menubg)); } } /** * 当点击tab选项卡的时候,更改当前的背景 */ tabs.setOnTabChangedListener(new OnTabChangeListener() { @Override public void onTabChanged(String tabId) { // TODO Auto-generated method stub for (int i = 0; i < tabWidget.getChildCount(); i++) { View vvv = tabWidget.getChildAt(i); if (tabs.getCurrentTab() == i) { vvv.setBackgroundDrawable(getResources().getDrawable( R.drawable.menufocus)); } else { vvv.setBackgroundDrawable(getResources().getDrawable( R.drawable.menubg)); } } } }); } }
发表评论
-
Android 漂亮的 Dialog (弹出框)
2012-02-13 23:35 4307在新浪微博Android客户端的开发的课程中呢要用的得自定义的 ... -
ListView的分页显示
2012-01-13 11:22 1240package com.anddev.ListMore.Tes ... -
ProgressBar的圆形和长条形设置
2012-01-12 15:02 0默认的progresbar是圆形的旋转动画: <Pro ... -
把TextView中的文字添加阴影效果及Style的使用
2012-01-12 15:00 2114<TextView android:id=" ... -
GridView动态加载数据情况下,选中状态的实现
2012-01-12 14:57 1517GridView使用AdapterView动态加载数据情况下, ... -
Android中的透明属性的设置
2012-01-12 14:50 1292ui设计时,需要指定某个元素的drawable时,有时候需要告 ... -
简单实现ImageView的加边框颜色的方法
2012-01-12 14:48 2376对于一个ImageView,如果我们要加上边框,比如宽为3dp ... -
android ,点击title的ImageView弹出PopupWindow【安卓进化七】
2011-12-03 10:33 1425一、曾经做过一个项目,用的大概就是这种布局,title布局,t ... -
Android之PopupWindow弹出对话框
2011-12-03 09:40 4111Android 的 对话框常 ... -
CursorTreeAdapter 详解
2011-12-02 17:44 2211CursorTreeAdapter 通过该适配类可以用一连续的 ... -
Android 应用程序窗体显示状态操作(requestWindowFeature()的应用)
2011-12-02 09:43 786我们在开发程序是经常会需要软件全屏显示、自定义标题(使用按钮等 ... -
Android GestureDetector 手势基础
2011-12-01 16:34 13121. 当用户触摸屏幕的时候,会产生许多手势,例如dow ... -
Android GestureDetector手势识别类
2011-12-01 14:26 2796为了加强鼠标响应事件,Android提供了GestureDet ... -
android之Tabhost深入讲解一
2011-11-28 21:46 1704大家都知道Tabhost中Tabwidget的布局是图标在上, ... -
Android中的view
2011-11-21 15:02 1190View类是Android的一个超类,这个类几乎包含了所有的屏 ... -
Android自定义View之一:初探实例 .
2011-11-21 14:53 851Android自定义View实现很简单 继承View,重写构 ...
相关推荐
本教程将深入讲解如何使用TabHost在Android应用中实现自定义的页签页面。 首先,我们需要理解TabHost的基本结构。TabHost包含两个主要部分:TabWidget和FrameLayout。TabWidget是显示页签的地方,而FrameLayout...
本文将深入讲解如何在Android中使用TabHost,并通过一个简单实例来演示其基本用法。 首先,我们需要了解TabHost的基本结构。TabHost通常包含两个主要部分:TabWidget和FrameLayout。TabWidget负责显示和管理各个Tab...
本篇将深入讲解如何利用TabHost来构建一个简单的Android应用实例。 首先,我们需要了解TabHost的基本结构。TabHost由两部分组成:TabWidget和FrameLayout。TabWidget负责显示各个选项卡,而FrameLayout则承载每个...
本教程将深入讲解如何使用TabHost实现全面的功能,帮助开发者掌握这一核心组件。 首先,TabHost是一个容器,它允许你将多个TabWidget(选项卡)和一个FrameLayout(内容区域)组合在一起。TabWidget显示选项卡,而...
本教程将深入讲解如何在Android Studio中使用TabHost来设计应用程序。 首先,理解TabHost的基本概念是必要的。TabHost是一个容器,它可以容纳一个TabWidget(用于显示选项卡)和一个FrameLayout(用于展示被选中...
本文将深入讲解如何在Android应用程序中有效地使用TabHost。 一、TabHost概述 TabHost是Android SDK中的一个容器类,用于管理一组TabWidget(标签)和一个FrameLayout(帧布局),在这个帧布局中,我们可以切换显示...
在Android开发中,自定义组件是提升应用独特性和用户体验的关键技术之一。本示例主要讲解如何使用自定义的Button和TabHost来实现页面间的切换,从而创建一个具有个性化标签导航功能的应用。 首先,我们来看看...
本篇文章将深入探讨如何在Android中自定义TabHost,以实现美观且功能丰富的界面。 首先,让我们理解TabHost的基本结构。TabHost通常包含两个主要部分:TabWidget和FrameLayout。TabWidget是显示标签的部分,而...
下面将详细讲解TabHost的相关知识点。 1. **TabHost概述**:TabHost是一个容器,它允许开发者在一个布局中包含多个TabWidget(标签)和一个FrameLayout(内容区)。每个Tab都对应一个不同的Activity或Fragment,当...
这篇博客详细讲解了如何使用TabHost来实现这一功能,我们将深入探讨这个主题。 首先,TabHost是Android提供的一个容器,它允许我们在一个Activity中创建多个TabWidget(选项卡)和一个FrameLayout(帧布局),帧...
本教程将深入讲解如何实现自定义的`TabHost`,并提供一个底部的示例(`TabHostDemo`)来帮助你理解和实践这个功能。 ### 1. `TabHost`简介 `TabHost`是Android SDK中的一个容器,它用于管理多个`TabWidget`(选项卡...
本示例"Android应用源码之嵌套TabHost示例.zip"深入探讨了如何在Android应用中实现嵌套的TabHost,这通常发生在需要在每个Tab中再分层次展示内容时。下面将详细讲解这个知识点。 首先,TabHost是Android SDK提供的...
本实例将深入讲解如何使用TabHost来构建一个多页面的应用,让用户体验更加丰富和直观。 一、TabHost概述 TabHost是Android SDK中的一个类,它允许开发者在应用中实现多标签导航。通过TabHost,我们可以创建一个包含...
本文将深入探讨如何使用TabHost组件在同一Activity上实现简单的Android选项卡菜单。TabHost是Android SDK提供的一种用于构建多标签界面的容器,它允许我们在一个Activity内创建多个Tab,每个Tab对应一个单独的视图...
本文将深入讲解TabHost的使用方法,以及如何自定义它的显示样式。 首先,TabHost是Android系统提供的一个容器,它可以包含一个TabWidget(用于显示选项卡)和一个FrameLayout(用于显示每个选项卡的内容)。通常,...
在"Android应用源码可以横向拖动的TabHost"这个项目中,我们可以深入学习如何实现一个支持横向滑动的TabHost,这对于构建用户友好的多视图应用程序至关重要。以下将详细讲解相关知识点。 1. TabHost基本概念:...
在Android开发中,TabHost和Gallery是两个非常重要的组件,它们分别用于实现多标签页的切换和图片轮播效果。本文将深入解析这两个组件的使用方法,并通过一个经典的实例来展示它们如何协同工作。 首先,TabHost是...
本篇将详细讲解基于源码的"Android应用源码之封装的一个tabhost框架"。 首先,TabHost是Android SDK中的一个容器类,它允许开发者在同一个Activity中展示多个Fragments或Views,通过TabWidget(标签栏)和...
在Android开发中,`ViewPager`和`TabHost`是两种常用的组件,用于创建具有滑动导航和多标签视图的应用。本教程将深入探讨如何将它们结合使用,并提供相关的源码示例。`ViewPager`提供了水平滑动页面的效果,而`...