Android仿新浪微博底部布局TabHost

来源:互联网 发布:停止nginx的命令 编辑:程序博客网 时间:2024/05/17 21:06

前言

最近学习Android开发,公司马上要有Android项目开发,突感压力山大。接到上级命令,做个类似新浪微博的界面出来,只好加紧学习,搜集资料,终于不负圣恩,按时完成。由此促成这篇文章的诞生,废话不多说,上正文.......

AndroidManifest.xml

简介

Android程序的主入口,类似于J2EE项目中的web.xml,定义了程序的内容和行为。

代码

<manifest xmlns:android="http://schemas.android.com/apk/res/android"    package="com.duanyr.sinaweibotabhost"    android:versionCode="1"    android:versionName="1.0" >    <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="15" />    <application        android:icon="@drawable/ic_launcher"        android:label="@string/app_name"        android:theme="@style/AppTheme" >        <!-- Android程序主入口,调用MainActivity -->        <activity            android:name=".MainActivity"            android:label="@string/title_activity_main" >            <intent-filter>                <action android:name="android.intent.action.MAIN" />                <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>        </activity>        <!-- 注册项目用到的多个Activity -->        <activity android:name=".HomeActivity" />        <activity android:name=".MessageActivity" />        <activity android:name=".InfoActivity" />    </application></manifest>

由上述配置文件可以看出,程序的主入口为MainActivity.java,接下来看MainActivity.java的内容。

MainActivity.java

package com.duanyr.sinaweibotabhost;import android.app.TabActivity;import android.content.Intent;import android.os.Bundle;import android.view.Window;import android.widget.CompoundButton;import android.widget.CompoundButton.OnCheckedChangeListener;import android.widget.RadioButton;import android.widget.TabHost;/** * @author: duanyr  * @创建时间: 2012-11-12 下午4:02:00  *  * 类说明:仿新浪微博底部TabHost实现 */public class MainActivity extends TabActivity implementsOnCheckedChangeListener {private TabHost tabHost;private Intent homeIntent;private Intent messageIntent;private Intent infoIntent;/** * 重写Activity的onCreate方法 * 该方法当程序启动时,切换横竖屏时,再次启动时运行 */@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);//不显示titlerequestWindowFeature(Window.FEATURE_NO_TITLE);setContentView(R.layout.activity_main);// ~~~~~~~~~~~~ 初始化~~~~~~~~~~//this.homeIntent = new Intent(this, HomeActivity.class);this.messageIntent = new Intent(this, MessageActivity.class);this.infoIntent = new Intent(this, InfoActivity.class);initRadios();//初始化底部按钮setupIntent();//绑定选项卡数据}/** * 初始化底部按钮 */private void initRadios() {((RadioButton) findViewById(R.id.radio_btn_home)).setOnCheckedChangeListener(this);((RadioButton) findViewById(R.id.radio_btn_message)).setOnCheckedChangeListener(this);((RadioButton) findViewById(R.id.radio_btn_info)).setOnCheckedChangeListener(this);}/** * 底部按钮改变是调用的方法 */public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {if (isChecked) {switch (buttonView.getId()) {case R.id.radio_btn_home:this.tabHost.setCurrentTabByTag("home_tab");break;case R.id.radio_btn_message:this.tabHost.setCurrentTabByTag("message_tab");break;case R.id.radio_btn_info:this.tabHost.setCurrentTabByTag("info_tab");break;}}}/** * 绑定各个选项卡数据内容 */private void setupIntent() {this.tabHost = getTabHost();TabHost localTabHost = this.tabHost;localTabHost.addTab(buildTabSpec("home_tab", R.string.main_home,R.drawable.icon_home, this.homeIntent));localTabHost.addTab(buildTabSpec("message_tab", R.string.main_message,R.drawable.icon_message, this.messageIntent));localTabHost.addTab(buildTabSpec("info_tab", R.string.main_info,R.drawable.icon_info, this.infoIntent));}private TabHost.TabSpec buildTabSpec(String tag, int resLabel, int resIcon,final Intent content) {return this.tabHost.newTabSpec(tag).setIndicator(getString(resLabel),getResources().getDrawable(resIcon)).setContent(content);}}

由上述文件可以看出,其加载的视图为activity_main.xml,接下来看activity_main.xml。
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"    android:id="@android:id/tabhost"    android:layout_width="fill_parent"    android:layout_height="fill_parent" >    <LinearLayout        android:layout_width="fill_parent"        android:layout_height="fill_parent"        android:orientation="vertical" >        <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:layout_width="fill_parent"            android:layout_height="wrap_content"            android:layout_weight="0.0"            android:visibility="gone" />        <RadioGroup            android:id="@+id/main_radio"            android:layout_width="fill_parent"            android:layout_height="wrap_content"            android:layout_gravity="bottom"            android:background="@drawable/maintab_bg"            android:gravity="center_vertical"            android:orientation="horizontal" >            <RadioButton                android:id="@+id/radio_btn_home"                style="@style/main_tab_bottom"                android:layout_marginTop="2.0dip"                android:checked="true"                android:drawableTop="@drawable/icon_home"                android:text="@string/main_home" />            <RadioButton                android:id="@+id/radio_btn_message"                style="@style/main_tab_bottom"                 android:layout_marginTop="2.0dip"                android:drawableTop="@drawable/icon_message"                android:text="@string/main_message" />                        <RadioButton                android:id="@+id/radio_btn_info"                style="@style/main_tab_bottom"                android:layout_marginTop="2.0dip"                android:drawableTop="@drawable/icon_info"                android:text="@string/main_info" />        </RadioGroup>    </LinearLayout></TabHost>


由上述xml文件可以看出,此底部菜单是有一个单选按钮组来完成的,其中包括三个单选按钮,分别为home(主页)、message(消息)、info(个人信息),结合MainActivity.java可以知道当改变单选按钮时,会显示不同的视图。以message为例,MessageActivity.java如下

MessageActivity.java

package com.duanyr.sinaweibotabhost;import android.app.Activity;import android.os.Bundle;public class MessageActivity extends Activity {    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_message);    }}

activity_message.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent" >    <TextView        android:id="@+id/my_info"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="@string/main_message" /></LinearLayout>

以上为Message(信息)对应的Activity和XML文件,其他两个也于此一样,就不在一一列举了,接下来是项目中的资源文件:String.xml和styles.xml

String.xml

<resources>    <string name="app_name">SinaWeiboTabHost</string>    <string name="menu_settings">Settings</string>    <string name="title_activity_main">MainActivity</string>    <string name="main_home">主页</string>    <string name="main_message">消息</string>    <string name="main_info">个人资料</string></resources>

Styles.xml

<resources>    <style name="AppTheme" parent="android:Theme.Light" />    <style name="main_tab_bottom">        <item name="android:textSize">10.0dip</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">5.0dip</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">2.0dip</item>        <item name="android:layout_weight">1.0</item>    </style></resources>

还有部分图片资源不方便上传,具体项目已经上传到资源库中,地址为:http://download.csdn.net/detail/duanyanrui/4759463,欢迎大家下载。此代码有借鉴网友的代码资料,在此谢谢各位网友的不吝赐教,项目有不当之处还请大家多多指教。
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 初中毕业证怎么办真的 初中没拿毕业证怎么办 初中毕业证没领怎么办 朗逸车电脑坏了怎么办 电车钥匙丢了怎么办 电车钥匙拧不动怎么办 汽车ecu初始化失败怎么办 汽车轻微的抖动怎么办 面包车电脑板紊乱怎么办 车子变速箱坏了怎么办 摩托车怠速不稳怎么办 汽车启动转数高怎么办 鬼火摩托车没力怎么办 摩托车油漆掉了怎么办 发动机怠速不稳怎么办 信用综合评分不足怎么办 综合评分不足是怎么办 综合信用分不足怎么办 iptv突然无信号怎么办 排气系统故障灯亮怎么办 空调冷凝器坏了怎么办 水温空调不制冷怎么办 用冷风机屋里潮怎么办 空调制热不出水怎么办 空调水管堵了怎么办 空调制冷不出水怎么办 空调出风口漏水怎么办 空调管漏水厉害怎么办 电动车车速变慢怎么办 遥控器按钮掉了怎么办 苹果6屏幕凸起怎么办 三星笔记本开机黑屏怎么办 笔记本电脑开机黑屏怎么办三星 笔记本电脑黑屏怎么办灯是亮得 九代雅阁收音机信号不好怎么办 九代雅阁电瓶亏电怎么办 17款雅阁混动汽车胎压灯怎么办 空调制冷出热风怎么办 轿车方向机漏油怎么办 车钥匙感应不灵怎么办 汽车助力泵漏油怎么办