- 浏览: 626153 次
- 性别:
- 来自: 济南
文章分类
- 全部博客 (164)
- android(基础) (81)
- android(进阶) (2)
- android(底层) (7)
- android(面试) (0)
- android(多媒体) (1)
- android(组件学习) (4)
- android(网络相关) (0)
- android(动画) (1)
- android(数据库) (2)
- android(UI样式) (3)
- android(xml) (0)
- android(调试) (14)
- android(环境搭建) (7)
- android(api) (1)
- C++ (1)
- C (0)
- JavaSE (2)
- Objective-c (1)
- JavaScript (0)
- 设计模式 (0)
- eclipse (3)
- javaee (4)
- 其它 (5)
- linux (18)
- Oracle (1)
- mysql (1)
- 嵌入式linux (1)
- 版本控制工具 (3)
- web前端 (1)
- python (1)
最新评论
-
chungehenyy:
android颜色对应的xml配置值,颜色表 -
u011467537:
...
android中用Spannable在TextView中设置超链接、颜色、字体 -
SurpriseLee:
不能更赞了!
android颜色对应的xml配置值,颜色表 -
u012094586:
这个代码是不是不全呀,能不能提供完整版的给予参考呢?xiexi ...
Android VideoView如何播放RTSP的流 -
luechenying:
顶上天!!!!!!!!!!!!!!!!!!
android颜色对应的xml配置值,颜色表
前言
为了更好的开发Android应用程序,除了熟练掌握基本的UI组件和API外,还需要掌握一些技巧,而这些技巧可以通过阅读一些代码来提高,本系列将与大家分享一些新浪微博布局方面的收获,欢迎交流!
声明
欢迎转载,但请保留文章原始出处:)
移动社区:http://dev.10086.cn
农民伯伯: http://www.cnblogs.com/over140
版本
新浪微博 weibo_10235010.apk
正文
一、效果图
红色部分是本文要实现的目标。
二、实现
maintabs.xml
styles.xml
1. 需要注意的是他这里把TabWidget的Visibility设置成了gone!也就是默认难看的风格不见了:,取而代之的是5个带风格的单选按钮.
2. 注意为单选按钮设置的style,其中最重要的是为其background设置了home_btn_bg.xml,也就是自定义了选中效果。
Java文件
1. 由于TabWidget被隐藏,所以相关的事件也会无效,这里取巧用RadioGroup与RadioButton的特性来处理切换,然后监听事件调用setCurrentTabByTag来切换Activity。
2. 注意即使TabWidget被隐藏,也要为其设置indicator,否则会保持。
三、总结
在这之前如果要做这种效果我恐怕第一时间就会想到用ActivityGroup来做,主要是因为TabHost的TabWidget非常难看,用起来也不方便。其实从源码可以看出,TabHost也是继承自ActivityGroup,这里结合了单选按钮和TabHost,各取其长,有时间可以专门写一个这样的自定义控件:)
四、相关文章
[Android]使用ActivityGroup来切换Activity和Layout
[url]http://www.cnblogs.com/over140/archive/2010/09/07/1820876.html [/url]
结束
本文中使用的资源均反编译自apk文件,这里主要是讲思路,欢迎大家交流。
为了更好的开发Android应用程序,除了熟练掌握基本的UI组件和API外,还需要掌握一些技巧,而这些技巧可以通过阅读一些代码来提高,本系列将与大家分享一些新浪微博布局方面的收获,欢迎交流!
声明
欢迎转载,但请保留文章原始出处:)
移动社区:http://dev.10086.cn
农民伯伯: http://www.cnblogs.com/over140
版本
新浪微博 weibo_10235010.apk
正文
一、效果图
红色部分是本文要实现的目标。
二、实现
maintabs.xml
<?xml version="1.0" encoding="UTF-8"?> <TabHost android:id="@android:id/tabhost" android:layout_width="fill_parent" android:layout_height="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android"> <LinearLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <FrameLayout android:id="@android:id/tabcontent" android:layout_width="fill_parent" android:layout_height="0.0dip" android:layout_weight="1.0" /> <TabWidget android:id="@android:id/tabs" android:visibility="gone" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="0.0" /> <RadioGroup android:gravity="center_vertical" android:layout_gravity="bottom" android:orientation="horizontal" android:id="@id/main_radio" android:background="@drawable/maintab_toolbar_bg" android:layout_width="fill_parent" android:layout_height="wrap_content"> <RadioButton android:text="@string/main_home" android:checked="true" android:id="@+id/radio_button0" android:layout_marginTop="2.0dip" android:drawableTop="@drawable/icon_1_n" style="@style/main_tab_bottom" /> <RadioButton android:id="@+id/radio_button1" android:layout_marginTop="2.0dip" android:text="@string/main_news" android:drawableTop="@drawable/icon_2_n" style="@style/main_tab_bottom" /> <RadioButton android:id="@+id/radio_button2" android:layout_marginTop="2.0dip" android:text="@string/main_my_info" android:drawableTop="@drawable/icon_3_n" style="@style/main_tab_bottom" /> <RadioButton android:id="@+id/radio_button3" android:layout_marginTop="2.0dip" android:text="@string/menu_search" android:drawableTop="@drawable/icon_4_n" style="@style/main_tab_bottom" /> <RadioButton android:id="@+id/radio_button4" android:layout_marginTop="2.0dip" android:text="@string/more" android:drawableTop="@drawable/icon_5_n" style="@style/main_tab_bottom" /> </RadioGroup> </LinearLayout> </TabHost>
styles.xml
<style name="main_tab_bottom"> <item name="android:textSize">@dimen/bottom_tab_font_size</item> <item name="android:textColor">#ffffffff</item> <item name="android:ellipsize">marquee</item> <item name="android:gravity">center_horizontal</item> <item name="android:background">@drawable/home_btn_bg</item> <item name="android:paddingTop">@dimen/bottom_tab_padding_up</item> <item name="android:layout_width">fill_parent</item> <item name="android:layout_height">wrap_content</item> <item name="android:button">@null</item> <item name="android:singleLine">true</item> <item name="android:drawablePadding">@dimen/bottom_tab_padding_drawable</item> <item name="android:layout_weight">1.0</item> </style>home_btn_bg.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_focused="true" android:state_enabled="true" android:state_pressed="false" android:drawable="@drawable/home_btn_bg_s" /> <item android:state_enabled="true" android:state_pressed="true" android:drawable="@drawable/home_btn_bg_s" /> <item android:state_enabled="true" android:state_checked="true" android:drawable="@drawable/home_btn_bg_d" /> <item android:drawable="@drawable/transparent" /> </selector>代码说明:
1. 需要注意的是他这里把TabWidget的Visibility设置成了gone!也就是默认难看的风格不见了:,取而代之的是5个带风格的单选按钮.
2. 注意为单选按钮设置的style,其中最重要的是为其background设置了home_btn_bg.xml,也就是自定义了选中效果。
Java文件
public class MainTabActivity extends TabActivity implements OnCheckedChangeListener { private TabHost mHost; private Intent mMBlogIntent; private Intent mMoreIntent; private Intent mInfoIntent; private Intent mSearchIntent; private Intent mUserInfoIntent; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.maintabs); // ~~~~~~~~~~~~ 初始化 this.mMBlogIntent = new Intent(this, HomeListActivity.class); this.mSearchIntent = new Intent(this, SearchSquareActivity.class); this.mInfoIntent = new Intent(this, MessageGroup.class); this.mUserInfoIntent = new Intent(this, MyInfoActivity.class); this.mMoreIntent = new Intent(this, MoreItemsActivity.class); initRadios(); setupIntent(); } /** * 初始化底部按钮 */ private void initRadios() { ((RadioButton) findViewById(R.id.radio_button0)).setOnCheckedChangeListener(this); ((RadioButton) findViewById(R.id.radio_button1)).setOnCheckedChangeListener(this); ((RadioButton) findViewById(R.id.radio_button2)).setOnCheckedChangeListener(this); ((RadioButton) findViewById(R.id.radio_button3)).setOnCheckedChangeListener(this); ((RadioButton) findViewById(R.id.radio_button4)).setOnCheckedChangeListener(this); } /** * 切换模块 */ @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (isChecked) { switch (buttonView.getId()) { case R.id.radio_button0: this.mHost.setCurrentTabByTag("mblog_tab"); break; case R.id.radio_button1: this.mHost.setCurrentTabByTag("message_tab"); break; case R.id.radio_button2: this.mHost.setCurrentTabByTag("userinfo_tab"); break; case R.id.radio_button3: this.mHost.setCurrentTabByTag("search_tab"); break; case R.id.radio_button4: this.mHost.setCurrentTabByTag("more_tab"); break; } } } private void setupIntent() { this.mHost = getTabHost(); TabHost localTabHost = this.mHost; localTabHost.addTab(buildTabSpec("mblog_tab", R.string.main_home, R.drawable.icon_1_n, this.mMBlogIntent)); localTabHost.addTab(buildTabSpec("message_tab", R.string.main_news, R.drawable.icon_2_n, this.mInfoIntent)); localTabHost.addTab(buildTabSpec("userinfo_tab", R.string.main_my_info, R.drawable.icon_3_n, this.mUserInfoIntent)); localTabHost.addTab(buildTabSpec("search_tab", R.string.menu_search, R.drawable.icon_4_n, this.mSearchIntent)); localTabHost.addTab(buildTabSpec("more_tab", R.string.more, R.drawable.icon_5_n, this.mMoreIntent)); } private TabHost.TabSpec buildTabSpec(String tag, int resLabel, int resIcon, final Intent content) { return this.mHost .newTabSpec(tag) .setIndicator(getString(resLabel), getResources().getDrawable(resIcon)) .setContent(content); }代码说明
1. 由于TabWidget被隐藏,所以相关的事件也会无效,这里取巧用RadioGroup与RadioButton的特性来处理切换,然后监听事件调用setCurrentTabByTag来切换Activity。
2. 注意即使TabWidget被隐藏,也要为其设置indicator,否则会保持。
三、总结
在这之前如果要做这种效果我恐怕第一时间就会想到用ActivityGroup来做,主要是因为TabHost的TabWidget非常难看,用起来也不方便。其实从源码可以看出,TabHost也是继承自ActivityGroup,这里结合了单选按钮和TabHost,各取其长,有时间可以专门写一个这样的自定义控件:)
四、相关文章
[Android]使用ActivityGroup来切换Activity和Layout
[url]http://www.cnblogs.com/over140/archive/2010/09/07/1820876.html [/url]
结束
本文中使用的资源均反编译自apk文件,这里主要是讲思路,欢迎大家交流。
发表评论
-
Fragment 横竖屏切换问题
2013-04-24 14:41 1864在默认情况下当发生横 ... -
Android EditText 增加自定义过滤
2012-02-19 22:20 2429在Android中,可以通过对EditText设置setFil ... -
解决android textview自动换行问题
2012-02-16 11:46 10778今天忽然发现android项目中的文字排版参差不齐的情况非常严 ... -
通过adb命令获取Android手机的IP地址
2011-12-30 19:11 4399要获取Android手机的IP地址,必须先保证你的Androi ... -
Android 图形用户界面 之 绘图(二) Paint类 主要方法介绍
2011-12-30 09:10 1472/** * Paint类介绍 * * Pa ... -
ListView底部分隔线的问题
2011-12-20 14:42 4330在工作中遇到了一个难题,就是一个listView在最下面的一个 ... -
android获取手机上的图片和视频缩略图thumbnails
2011-11-03 22:05 10076转贴自:http://www.android123.com.c ... -
Activity中使用AIDL让Service与Activity通信
2011-10-25 00:06 2803简易计算器,默认执行1+1的计算,点击go按钮执行计算,先看效 ... -
Android图形报表之AchartEngine(附开发包+API文档)
2011-10-22 16:49 11408统计报表: Java4Less (http://java4le ... -
android中用Spannable在TextView中设置超链接、颜色、字体
2011-10-21 23:08 50562昨晚研读 ApiDemo 源码至 com.example.an ... -
android动态设置TextView字体颜色
2011-10-21 11:50 6478最近写程序就遇到了这么个难题,在TextView 上,正常字体 ... -
layer-list和include的使用
2011-10-20 10:14 2416layer-list,include,merge使用,记录一下 ... -
自定义AlertDialog样式,根据屏幕大小来显示
2011-10-19 12:43 4627先介绍一些关于AlertDialog的基本知识: ... -
Android获取屏幕分辨率及DisplayMetrics简介
2011-10-19 08:56 2836Android 可设置为随着窗口大小调整缩放比例,但即便如此, ... -
android资源文件访问android.resource
2011-10-17 09:14 4221android.resource使用转自:http://www ... -
ImageView添加边框
2011-10-16 19:37 2118import android.content.Context; ... -
Android 实现TextView中文字链接的方式
2011-10-16 14:08 2525Android 的实现TextView中文字链接的方式有很多种 ... -
android实现TextView多行文本滚动
2011-10-16 13:38 6447Android中我们为了实现文本的滚动可以在ScrollVie ... -
ListView之setEmptyView的问题
2011-10-15 23:19 4983使用listView或者gridView时,当列表为空时,有时 ... -
去掉TabActivity底部默认白线
2011-10-15 16:38 3309经过一翻百度,google终于实现了TabActivity设置 ...
相关推荐
本资料“新浪微博布局学习——妙用TabHost.zip”显然是针对如何在Android应用中巧妙运用TabHost来构建类似新浪微博的多标签布局进行的讲解。 TabHost是Android SDK提供的一个类,它的主要功能是管理一组TabWidget...
当我们提到“安卓 TabHost 嵌套 TabHost”,这意味着在一个TabHost内,我们还要再创建一个TabHost,形成一个多层选项卡的结构,以提供更复杂的导航体验。 首先,我们来理解基本的TabHost用法。TabHost通常由两部分...
TabHost tabHost = (TabHost) findViewById(R.id.tabhost); tabHost.setup(); ``` 3. **添加选项卡**:为每个选项卡创建一个TabSpec,设置其标签和关联的视图。这里我们可以添加一个自定义的View来显示红点。 `...
本话题主要探讨如何在应用中实现“底部TabHost嵌套顶部TabHost”的设计,以及顶部TabHost如何与ListView协同工作,创建类似网易新闻的用户体验,允许用户在各个Tab之间滑动并显示对应的ListView内容。 首先,我们要...
你可以使用`setIndicator()`方法设置选项卡的显示文本,用`setContent()`方法指定Intent。 5. **处理点击事件**:虽然TabHost会自动处理点击事件,但有时你可能需要自定义点击事件,这时可以通过监听器(如`...
在Android应用开发中,TabHost是一个非常重要的组件,它用于创建多标签的界面,让用户能够通过不同的标签页浏览和切换不同的功能或内容。本示例是关于如何在Android中实现嵌套的TabHost,即两个层级的TabHost,类似...
在Android开发中,TabHost是一个非常重要的组件,用于创建具有多个Tab标签的界面,每个标签可以展示不同的内容或活动(Activity)。本教程将详细介绍如何使用TabHost,特别适合初学者和教学场景,例如构建一个模拟...
在Android开发中,TabHost和ViewPager是两种常用的组件,它们可以结合起来创建出具有滑动切换效果的界面。本文将深入探讨如何使用TabHost与ViewPager来实现这一功能,并提供相关的源码解析。 首先,TabHost是...
在Android开发中,TabHost是一个重要的组件,用于创建带有可切换标签的用户界面。这篇博客“TabHost两种实现方式”探讨了如何在Android应用中使用TabHost来构建多标签视图。下面我们将深入讨论这两种实现方式及其...
- `TabHost`通常和`Activity`一起使用,但随着Android版本的更新,推荐使用`ViewPager`配合`TabLayout`,因为`TabHost`在新的Android设计指南中已被弃用。 - 当使用`Fragment`时,记得在`onSaveInstanceState()`和`...
在Android开发中,TabHost是一个重要的组件,它用于创建具有底部导航栏的应用界面,通常包含多个Tab,每个Tab对应一个不同的活动(Activity)或者视图(View)。本篇文章将深入探讨TabHost的各种实现方式,帮助...
TabHost tabHost = (TabHost) findViewById(R.id.tabhost); tabHost.setup(); ``` 2. **添加Tab** 为TabHost添加页卡,你需要调用`TabHost.addTab()`方法。这个方法接受四个参数:标签的布局资源ID、标签的标题、...
在Android开发中,TabHost是一个非常重要的组件,用于创建具有多个Tab标签的界面,每个标签页可以关联到不同的Activity或View。本示例是关于如何使用TabHost实现单例模式的小例子,旨在帮助开发者理解如何在TabHost...
在Android开发中,TabHost是实现标签栏切换界面的一个重要组件。TabHost允许开发者创建一个包含多个Tab的界面,每个Tab都可以关联到不同的活动(Activity)或者帧布局(FrameLayout)。下面将详细介绍TabHost的使用...
在Android应用开发中,`ViewPager` 和 `TabHost` 是两个非常重要的组件,它们分别用于实现页面滑动和标签导航。本示例“ViewPager和Tabhost结合,可滑动的tabhost”展示了如何将这两个组件有效地结合起来,创建一个...
在Android开发中,`TabHost` 是一个非常重要的组件,用于实现多标签页面的切换,而将自定义的`ListView`填充到`TabHost`中则可以构建出复杂的交互界面。下面我们将详细探讨如何实现这一功能。 首先,我们需要了解`...
在Android开发中,TabHost是一个常用的组件,用于实现多页面的切换效果,通常与TabWidget和FrameLayout一起使用,创建类似手机应用底部导航栏的布局。然而,在实际使用过程中,开发者经常会遇到一个问题:TabHost...
- `TabHost`在Android API 30及更高版本已被弃用,推荐使用`FragmentTabHost`或者`BottomNavigationView`等更现代的导航组件。 6. **实践应用** `TabHost`常用于构建多页签的应用主界面,如新闻阅读应用、社交...
在Android的早期版本中,TabActivity经常与TabHost一起使用,但随着版本的更新,TabActivity已被弃用。现在,我们通常直接在普通的Activity中使用TabHost。不过,现代的Android开发中,更多地推荐使用...