国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 系統(tǒng) > Android > 正文

Android仿微信底部菜單欄功能顯示未讀消息數(shù)量

2019-12-12 06:19:45
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

底部菜單欄很重要,我看了一下很多應(yīng)用軟件都是用了底部菜單欄,這里使用了tabhost做了一種通用的(就是可以像微信那樣顯示未讀消息數(shù)量的,雖然之前也做過(guò)但是layout下的xml寫(xiě)的太臃腫,這里去掉了很多不必要的層,個(gè)人看起來(lái)還是不錯(cuò)的,所以貼出來(lái)方便以后使用)。
先看一下做出來(lái)之后的效果:


以后使用的時(shí)候就可以換成自己項(xiàng)目的圖片和字體了,主框架不用變哈哈,
首先是要布局layout下xml文件 main.xml:

<?xml version="1.0" encoding="UTF-8"?> <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:background="@color/bg_gray"     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" />      <FrameLayout       android:layout_width="fill_parent"       android:layout_height="wrap_content" >        <RadioGroup         android:id="@+id/main_tab_group"         android:layout_width="fill_parent"         android:layout_height="wrap_content"         android:layout_gravity="bottom"         android:background="@drawable/bottom1"         android:gravity="bottom"         android:orientation="horizontal"          >          <RadioButton           android:id="@+id/main_tab_addExam"           style="@style/MMTabButton"           android:layout_weight="1.0"             android:drawableTop="@drawable/bg_checkbox_icon_menu_0"           android:text="添加考試" />          <RadioButton           android:id="@+id/main_tab_myExam"           style="@style/MMTabButton"           android:layout_weight="1.0"           android:checked="true"           android:drawableTop="@drawable/bg_checkbox_icon_menu_1"           android:text="我的考試" />          <RadioButton           android:id="@+id/main_tab_message"           style="@style/MMTabButton"           android:layout_weight="1.0"           android:drawableTop="@drawable/bg_checkbox_icon_menu_2"           android:text="我的通知" />          <RadioButton           android:id="@+id/main_tab_settings"           style="@style/MMTabButton"           android:layout_weight="1.0"             android:drawableTop="@drawable/bg_checkbox_icon_menu_3"           android:text="設(shè)置" />       </RadioGroup>        <TextView         android:id="@+id/main_tab_new_message"         android:layout_width="wrap_content"         android:layout_height="wrap_content"         android:layout_gravity="center_horizontal|top"         android:layout_marginLeft="60dip"         android:layout_marginTop="1dip"         android:background="@drawable/tips"         android:gravity="center"         android:text="1"         android:textColor="#ffffff"         android:textSize="10sp"         android:visibility="gone" />     </FrameLayout>   </LinearLayout>  </TabHost> 

在RadioGroup的外面加了一個(gè)FrameLayout,主要是為了使用TextView顯示消息數(shù)量,這里是居中靠左60dip,可能你會(huì)問(wèn)直接寫(xiě)死能支持多分辨率嗎,這個(gè)我在320*480的手機(jī)上試過(guò)沒(méi)問(wèn)題的,因?yàn)閐ip是與設(shè)備無(wú)關(guān)的支持多分辨率,至于1280*800平板電腦這樣的分辨率我就不能保證了,哈哈!
接下來(lái)是樣式布局:

<style name="MMTabButton">   <item name="android:textSize">12.0dip</item>   <item name="android:gravity">center_horizontal</item>   <item name="android:background">@drawable/bg_checkbox_menus</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:textColor">@color/white</item>   <item name="android:layout_weight">1.0</item>   <item name="android:paddingBottom">2.0dip</item>   <item name="android:paddingTop">2.0dip</item> </style> 

在drawable下bg_checkbox_menus.xml

<?xml version="1.0" encoding="utf-8"?>  <selector xmlns:android="http://schemas.android.com/apk/res/android">    <item    android:state_checked="false"    android:drawable="@drawable/mm_trans" />    <item    android:state_checked="true"    android:drawable="@drawable/home_btn_bg" />  </selector>  

其他的那四個(gè)都合這個(gè)一樣點(diǎn)擊后圖片換成亮色的,所以就不一一貼出來(lái)了。
最后看MainActivity這個(gè)類(lèi):

package cn.com.karl.test;   import android.app.TabActivity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.view.Window; import android.widget.RadioGroup; import android.widget.RadioGroup.OnCheckedChangeListener; import android.widget.TabHost; import android.widget.TextView;  public class MainActivity extends TabActivity {   /** Called when the activity is first created. */   private TabHost tabHost;   private TextView main_tab_new_message;      @Override   public void onCreate(Bundle savedInstanceState) {     super.onCreate(savedInstanceState);     this.requestWindowFeature(Window.FEATURE_NO_TITLE);     setContentView(R.layout.main);          main_tab_new_message=(TextView) findViewById(R.id.main_tab_new_message);     main_tab_new_message.setVisibility(View.VISIBLE);     main_tab_new_message.setText("10");          tabHost=this.getTabHost();     TabHost.TabSpec spec;     Intent intent;      intent=new Intent().setClass(this, AddExamActivity.class);     spec=tabHost.newTabSpec("添加考試").setIndicator("添加考試").setContent(intent);     tabHost.addTab(spec);          intent=new Intent().setClass(this,MyExamActivity.class);     spec=tabHost.newTabSpec("我的考試").setIndicator("我的考試").setContent(intent);     tabHost.addTab(spec);          intent=new Intent().setClass(this, MyMessageActivity.class);     spec=tabHost.newTabSpec("我的通知").setIndicator("我的通知").setContent(intent);     tabHost.addTab(spec);              intent=new Intent().setClass(this, SettingActivity.class);     spec=tabHost.newTabSpec("設(shè)置").setIndicator("設(shè)置").setContent(intent);     tabHost.addTab(spec);     tabHost.setCurrentTab(1);          RadioGroup radioGroup=(RadioGroup) this.findViewById(R.id.main_tab_group);     radioGroup.setOnCheckedChangeListener(new OnCheckedChangeListener() {              @Override       public void onCheckedChanged(RadioGroup group, int checkedId) {         // TODO Auto-generated method stub         switch (checkedId) {         case R.id.main_tab_addExam://添加考試           tabHost.setCurrentTabByTag("添加考試");           break;         case R.id.main_tab_myExam://我的考試           tabHost.setCurrentTabByTag("我的考試");           break;         case R.id.main_tab_message://我的通知           tabHost.setCurrentTabByTag("我的通知");           break;         case R.id.main_tab_settings://設(shè)置           tabHost.setCurrentTabByTag("設(shè)置");           break;         default:           //tabHost.setCurrentTabByTag("我的考試");           break;         }       }     });   }       } 

這樣就完成了,主要還是使用了tabhost完成,tabhost有緩存機(jī)制這四個(gè)界面都會(huì)緩存到內(nèi)存中,這樣即有利也有弊,有利是因?yàn)榍袚Q的時(shí)候不用在重新加載了,有弊是因?yàn)榫彺嫠膫€(gè)界面會(huì)耗費(fèi)內(nèi)存較多一些。如果只想緩存一個(gè)界面,大家可以參考這篇文章:Android項(xiàng)目實(shí)戰(zhàn)之仿網(wǎng)易頂部導(dǎo)航欄效果,使用ActivityGroup實(shí)現(xiàn)頂部滑動(dòng)欄,就像網(wǎng)易新聞的頂部滑動(dòng)欄我相信也是只緩存了一個(gè)界面,切換的時(shí)候是從數(shù)據(jù)庫(kù)加載的,所以第二次滑動(dòng)加載會(huì)比較快。

本文源碼下載地址:Android仿微信底部菜單欄

以上就是本文的全部?jī)?nèi)容,希望能給大家一個(gè)參考,也希望大家多多支持武林網(wǎng)。

發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 杭锦后旗| 永善县| 无极县| 郑州市| 内江市| 临邑县| 肇州县| 香河县| 县级市| 安西县| 海淀区| 新乡市| 麻江县| 华宁县| 项城市| 新野县| 定陶县| 肇东市| 精河县| 贺州市| 远安县| 安平县| 信宜市| 南召县| 佛学| 淮北市| 星座| 巴东县| 贵阳市| 长汀县| 苍梧县| 水富县| 高州市| 宜阳县| 汤阴县| 怀仁县| 张家港市| 盘山县| 饶平县| 饶平县| 香格里拉县|