亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > Android > 正文

Android編程之TabWidget選項卡用法實例分析

2020-04-11 11:09:08
字體:
來源:轉載
供稿:網友

本文實例講述了Android編程之TabWidget選項卡用法。分享給大家供大家參考,具體如下:

1 概覽

TabWidget與TabHost。tab組件一般包括TabHost和TabWidget、FrameLayout,且TabWidget、FrameLayout屬于TabHost。

是否繼承TabActivity的問題

實現步驟。兩種實現方式,一種是將每個Tab的布局嵌在TabHost中的FrameLayout中,每個Tab的內容布局與顯示都在FrameLayout中進行,缺點是布局會顯得很臃腫;一種是每個Tab從FrameLayout中獨立出來,以Activity呈現,這樣使得每個Tab有單獨的布局。

2 效果圖

Widget在頂部的情形:

3 主要布局

3.1 TabMain布局

方式一:

<?xml version="1.0" encoding="utf-8"?><TabHost xmlns:android="http://schemas.android.com/apk/res/android"  android:id="@+id/tabhost"  android:layout_width="match_parent"  android:layout_height="match_parent"  android:orientation="vertical" >  <RelativeLayout    android:layout_width="fill_parent"    android:layout_height="fill_parent"    android:orientation="vertical" >    <TabWidget      android:id="@android:id/tabs"      android:layout_width="fill_parent"      android:layout_height="60dip"      android:layout_alignParentBottom="true"      android:background="#424242" >    </TabWidget>    <FrameLayout      android:id="@android:id/tabcontent"      android:layout_width="fill_parent"      android:layout_height="fill_parent" >      <LinearLayout        android:id="@+id/theme"        android:layout_width="fill_parent"        android:layout_height="fill_parent"        android:orientation="vertical" >        <TextView          android:id="@+id/theme_title"          android:layout_width="wrap_content"          android:layout_height="wrap_content"          android:text="Tab1" />      </LinearLayout>      <LinearLayout        android:id="@+id/wallpaper"        android:layout_width="fill_parent"        android:layout_height="fill_parent"        android:orientation="vertical" >        <TextView          android:id="@+id/wallpaper_title"          android:layout_width="wrap_content"          android:layout_height="wrap_content"          android:text="Tab2" />      </LinearLayout>      <LinearLayout        android:id="@+id/iconbg"        android:layout_width="fill_parent"        android:layout_height="fill_parent"        android:orientation="vertical" >        <TextView          android:id="@+id/iconbg_title"          android:layout_width="wrap_content"          android:layout_height="wrap_content"          android:text="Tab3" />      </LinearLayout>      <LinearLayout        android:id="@+id/screenlock"        android:layout_width="fill_parent"        android:layout_height="fill_parent"        android:orientation="vertical" >        <TextView          android:id="@+id/screenlock_title"          android:layout_width="wrap_content"          android:layout_height="wrap_content"          android:text="Tab4" />      </LinearLayout>      <LinearLayout        android:id="@+id/effect"        android:layout_width="fill_parent"        android:layout_height="fill_parent"        android:orientation="vertical" >        <TextView          android:id="@+id/effect_title"          android:layout_width="wrap_content"          android:layout_height="wrap_content"          android:text="Tab5" />      </LinearLayout>    </FrameLayout>  </RelativeLayout></TabHost>

方式二:

<?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"   android:background="@color/wcity_normal_bg" >  <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="fill_parent"     android:layout_weight="1" >  </FrameLayout>  <TabWidget     android:id="@android:id/tabs"     android:layout_width="fill_parent"     android:layout_height="wrap_content"     android:background="@drawable/tab"     />   </LinearLayout></TabHost>

3.2 TabItem布局

這一部分中方式一與方式二沒有什么區別,只有表示形式的區別。比如,根據需求,Tab可以

只以文字呈現,

可以只以圖片呈現,

可以同時有圖片和文字

其中有文字和圖片的布局如下:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  android:layout_width="fill_parent"  android:layout_height="fill_parent"  android:gravity="center_horizontal|center_vertical"  android:orientation="vertical" >  <LinearLayout    android:id="@+id/tabItem    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:background="@drawable/bg_ispressed"    android:gravity="center_horizontal|center_vertical"    android:orientation="vertical" >    <ImageView      android:id="@+id/icon"      android:layout_width="wrap_content"      android:layout_height="wrap_content" />    <TextView      android:id="@+id/name"      android:layout_width="wrap_content"      android:layout_height="wrap_content" />  </LinearLayout></LinearLayout>

3.3點擊狀態

Tab鍵點擊后狀態的問題,如果點擊后,沒有狀態提示對用戶是不友好的。點擊狀態的實現就是對TabItem布局的android:background進行設置。例如:

上述TabItem中LinearLayout的android:background設置的屬性:@drawable/bg_ispressed

其中bg_ispressed文件如下:

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

tab_selected_bg即是點擊后變換的圖片效果。

3.4 關于Tab位置的問題

Tab標簽顯示在頂部還是底部也是經常會遇到的問題。

通常TabMain布局中TabWidget在FrameLayout上面默認就是顯示在頂部了,如果改成在底部顯示,首先會想到的是直接調換順序,將TabWidget放在FrameLayout后面。

情形一:

問題來了,Tab欄直接消失掉(我試過),后來解決方法是:FrameLayout中添加屬性:android:layout_weight="1"。這種情形可以解決的條件是,TabWidget和FrameLayout被嵌套在LinearLayout布局中,如果是其他則行不通。

情形二:

TabWidget與FrameLayout順序任意,在TabWidget中添加屬性

復制代碼 代碼如下:
android:layout_alignParentBottom="true"

當然,這種情形適合TabWidget和FrameLayout被嵌套在RelativeLayout布局中,同樣的,如果是其他則行不通。

注:以上兩種情形也不是絕對的,只實踐過以上兩種情形,至于其他布局就不清楚了,具體問題具體分析吧。

4 繼承TabActivity?

4.1 繼承TabActivity與不繼承的問題

繼承不繼承TabActivity,看自己習慣了,都能正確實現,沒什么區別,至于在代碼方面唯一的區別在于:

不繼承TabActivity而繼承Activity的需要在代碼中加入:

復制代碼 代碼如下:
mTabHost.setup();

4.2 主要代碼

直接繼承自Activity的代碼

import java.util.ArrayList;import java.util.List;import android.app.Activity;import android.content.Context;import android.os.Bundle;import android.view.LayoutInflater;import android.view.View;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.TabHost;import android.widget.TextView;public class TabDesignActivity extends Activity{  private Context mContex = this;  private TabHost mTabHost;  private String TAB1 = "tab1";  private String TAB2 = "tab2";  private String TAB3 = "tab3";  private String TAB4 = "tab4";  private String TAB5 = "tab5";  private List<LinearLayout> menuItemList;  @Override  protected void onCreate(Bundle savedInstanceState) {    // TODO Auto-generated method stub    super.onCreate(savedInstanceState);    setContentView(R.layout.tab_main);    menuItemList = new ArrayList<LinearLayout>();    mTabHost = (TabHost) findViewById(R.id.tabhost);    mTabHost.setup();    mTabHost.addTab(mTabHost.newTabSpec("tab1").setIndicator(getMenuItem(R.drawable.tab1_ispressed, TAB1)).setContent(R.id.tab1));    mTabHost.addTab(mTabHost.newTabSpec("tab2").setIndicator(getMenuItem(R.drawable.tab2_ispressed, TAB2)).setContent(R.id.tab2));    mTabHost.addTab(mTabHost.newTabSpec("tab3").setIndicator(getMenuItem(R.drawable.tab3_ispressed, TAB3)).setContent(R.id.tab3));    mTabHost.addTab(mTabHost.newTabSpec("tab4").setIndicator(getMenuItem(R.drawable.tab4_ispressed, TAB4)).setContent(R.id.tab4));    mTabHost.addTab(mTabHost.newTabSpec("tab5").setIndicator(getMenuItem(R.drawable.tab5_ispressed, TAB5)).setContent(R.id.tab5));  }  public View getMenuItem(int imgID, String textID){    LinearLayout ll = (LinearLayout)LayoutInflater.from(mContex).inflate(R.layout.tab_item, null);    ImageView imgView = (ImageView)ll.findViewById(R.id.icon);    imgView.setBackgroundResource(imgID);    TextView textView = (TextView)ll.findViewById(R.id.name);    textView.setText(textID);    menuItemList.add(ll);    return ll;  }}

繼承自TabActivity的實現

/** * @author aaron */package com.aaron.activity;import java.util.ArrayList;import java.util.List;import android.annotation.SuppressLint;import android.app.TabActivity;import android.content.Context;import android.content.Intent;import android.os.Bundle;import android.view.LayoutInflater;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.TabHost;import android.widget.TextView;import android.widget.TabHost.TabSpec;import com.aaron.util.R;/** * @author aaron *  */public class TabWidget extends TabActivity {// 聲明TabHost對象  private TabHost mTabhost;  private LayoutInflater mInflater;  private List<TextView> mtext;  private List<ImageView> mimage;  private List<TabSpec> mTabSpec;  private List<LinearLayout> linearLayout;  private List<Intent> intent;  private Context mContext;  private static final String[] tabTitle = { "Tab1", "Tab2", "Tab3", "Tab4","Tab5"};  private static final int[] tabImage = { R.drawable.main1, R.drawable.main2, R.drawable.main3, R.drawable.main4,R.drawable.main5};  /** Called when the activity is first created. */  @Override  public void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.tab_main);    mContext = this;    mInflater = LayoutInflater.from(this);    mTabhost = (TabHost) findViewById(android.R.id.tabhost);    mTabSpec = new ArrayList<TabSpec>();    linearLayout = new ArrayList<LinearLayout>();    mtext = new ArrayList<TextView>();    intent = new ArrayList<Intent>();    //****************************************************************    //若是引用有圖片的布局    mimage = new ArrayList<ImageView>();    //****************************************************************    creatTab();  }  @SuppressLint("NewApi")  public void creatTab() {    for (int i = 0; i < tabTitle.length; i++) {      mTabSpec.add(mTabhost.newTabSpec(tabTitle[i]));      //****************************************************************      //選擇使用哪種布局      //****************************************************************      linearLayout.add((LinearLayout) mInflater.inflate(R.layout.tabwidget2, null));       mtext.add((TextView) linearLayout.get(i).findViewById(R.id.tab_Text_name));      mtext.get(i).setText(tabTitle[i]);      //****************************************************************      //若是引用有圖片的布局依次添加進圖片      mimage.add((ImageView) linearLayout.get(i).findViewById(R.id.tab_Image_name));      mimage.get(i).setImageResource(tabImage[i]);      //****************************************************************      // 依次加入每個Tab的Activity      switch (i) {      case 0:        intent.add(new Intent().setClass(TabWidget.this, UdoActivity.class));        break;      case 1:        intent.add(new Intent().setClass(TabWidget.this, UdoActivity.class));        break;      case 2:        intent.add(new Intent().setClass(TabWidget.this, UdoActivity.class));        break;      case 3:        intent.add(new Intent().setClass(TabWidget.this, UdoActivity.class));        break;      case 4:        intent.add(new Intent().setClass(TabWidget.this, UdoActivity.class));        break;      }      mTabSpec.get(i).setIndicator(linearLayout.get(i));      mTabSpec.get(i).setContent(intent.get(i));      mTabhost.addTab(mTabSpec.get(i));    }}

4.3 關鍵代碼詳解

1)mTabHost.newTabSpec("tab1")用來new一個tab,同時標記這個tab的tag。
2)setContent()用來處理點擊這個tab后的動作,可以是這個Activity下的一個組件,如setContent(R.id.tab1),也可以是一個intent,比如:setContent(newIntent(this, SubTab.class))。
3)setIndicator()用來標記這個tab的名字,可以是setIndicator("tab1"),也可以包含其他的屬性,如圖片:setIndicator( "名稱",getResources().getDrawable(android.R.tab1))。
4)tabs.addTab(spec)將這個tab添加進TabHost。
5)getMenuItem(R.drawable.tab_ispressed,TAB1)設置其中一Tab被按下的狀態改變,R.drawable.tab_ispressed布局如下:

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

希望本文所述對大家Android程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久久久久国产精品三级玉女聊斋| 亚洲精品久久久久久下一站| 精品国产欧美一区二区三区成人| 2019中文字幕在线观看| 午夜精品福利视频| 精品久久久中文| 国产视频精品一区二区三区| 国产精品免费小视频| 国产99久久久欧美黑人| 成人性生交大片免费观看嘿嘿视频| 日韩精品极品视频| 亚洲天堂色网站| 久久好看免费视频| 日韩av在线导航| 成人精品视频久久久久| 九色精品免费永久在线| 国产ts人妖一区二区三区| 91在线播放国产| 国产91精品久| 国产精品女人久久久久久| 不卡在线观看电视剧完整版| 欧美激情综合色| 亚洲天堂av在线播放| 综合激情国产一区| 日韩av中文字幕在线播放| 日韩av片免费在线观看| 久久国产精品电影| 91av免费观看91av精品在线| 日韩精品视频免费专区在线播放| 国产成人在线一区| 日韩欧美在线免费| 亚洲视频一区二区三区| 668精品在线视频| 26uuu另类亚洲欧美日本一| 欧美日韩国产中字| 78色国产精品| 国产网站欧美日韩免费精品在线观看| 亚洲精品自拍偷拍| 久久久97精品| 国产成人精品一区二区三区| 国产脚交av在线一区二区| 亚洲精品美女久久久| 欧美xxxx综合视频| 国产精品毛片a∨一区二区三区|国| 亚洲国产精久久久久久久| 亚洲国产另类 国产精品国产免费| 亚洲国产精品成人va在线观看| 乱亲女秽乱长久久久| 成人福利在线视频| 久久99久久99精品免观看粉嫩| 日韩国产欧美精品一区二区三区| 97视频人免费观看| 国产成人在线一区| 国产福利精品视频| 在线成人激情黄色| 日本人成精品视频在线| 亚洲欧美激情四射在线日| 久久久亚洲精选| 美女精品视频一区| 欧美特黄级在线| 欧美性xxxxhd| 国产999精品| 亚州欧美日韩中文视频| 国产主播在线一区| 国产mv免费观看入口亚洲| 亚洲精品福利在线观看| 亚洲国语精品自产拍在线观看| 正在播放欧美一区| 国产精品一二三视频| 亚洲欧美在线免费观看| 在线看片第一页欧美| 欧美黑人性视频| 亚洲一区二区黄| 亚洲精品久久久久久久久久久久| 日韩精品在线免费观看| 国产精品国语对白| 久久精品男人天堂| 日韩美女在线看| 成人写真福利网| 日本不卡免费高清视频| 91精品国产91久久| 欧美日韩国产在线播放| 日韩在线资源网| 亚洲国产精品一区二区三区| 亚洲精品999| 国产91色在线播放| 日韩在线观看免费高清完整版| 国产美女精品免费电影| 色吧影院999| 欧美激情a∨在线视频播放| 久久久电影免费观看完整版| 欧美日韩免费在线观看| 亚洲午夜未删减在线观看| 日韩资源在线观看| 久久手机精品视频| 在线看日韩av| 国产精品日日摸夜夜添夜夜av| 在线观看免费高清视频97| 成人在线国产精品| 91豆花精品一区| 中文字幕精品在线视频| 国产91精品青草社区| 不卡av电影在线观看| 欧美成人黑人xx视频免费观看| 亚洲国产成人爱av在线播放| 91欧美精品午夜性色福利在线| 亚洲一区二区三区777| 亚洲最大福利网站| 久久精品亚洲国产| 日韩中文在线观看| 亚洲成人精品久久久| 97免费中文视频在线观看| 国产精品视频白浆免费视频| 亚洲香蕉在线观看| 成人国产精品av| 亚洲电影免费观看高清完整版在线| 日韩中文在线不卡| 国产亚洲福利一区| 欧美高清在线视频观看不卡| 亚洲人成网7777777国产| 中文字幕少妇一区二区三区| 色樱桃影院亚洲精品影院| 欧美性开放视频| 精品欧美aⅴ在线网站| 亚洲成人黄色在线观看| 欧美亚洲另类视频| 欧美一区二区三区免费视| 国产精品18久久久久久麻辣| 日韩中文字幕在线精品| 中文字幕亚洲无线码在线一区| 奇米一区二区三区四区久久| 精品久久久精品| 日韩中文字幕在线观看| 国产精品日韩欧美综合| 国产裸体写真av一区二区| 中日韩美女免费视频网址在线观看| 久久成人这里只有精品| 精品国产91久久久久久老师| 精品久久久久久| 欧美综合第一页| 日韩在线视频网| 亚洲人成免费电影| 国产精品久久久久久亚洲影视| 亚洲丝袜在线视频| 国产精品永久免费在线| 色香阁99久久精品久久久| 69影院欧美专区视频| 欧美性黄网官网| 中文字幕av一区| 亚洲无线码在线一区观看| 性色av一区二区三区红粉影视| 久久手机免费视频| 国产一区二区香蕉| 91精品国产综合久久男男| 91黑丝高跟在线| 亚洲美女精品成人在线视频| 97在线精品国自产拍中文| 色妞一区二区三区| 深夜福利国产精品| 美女视频久久黄| 琪琪亚洲精品午夜在线| 欧美亚洲第一页| 九九久久综合网站| 日韩美女激情视频|