现在的位置: 首页 > 综合 > 正文

Lance老师UI系列教程第四课->微信TAB界面的实现

2013年12月02日 ⁄ 综合 ⁄ 共 5385字 ⁄ 字号 评论关闭

UI系列教程第四课:微信TAB界面的实现

                                                       

 今天蓝老师给童鞋们带来的是微信TAB界面的实现

如效果图所示,这种TAB页面的效果是大多数应用都会涉及到的

思路一般就两种activitygrounp + radionbutton tabwidget + radionbutton

Radionbutton定制性较强,所以推荐使用它们

而对于tab项效果其实就是 topselector + backgroundselector + 文字selector

这样效果基本就全了,废话不多说,直接上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:id="@+id/main_radiogroup"
		android:gravity="center_vertical"
		android:layout_gravity="bottom" 
		android:orientation="horizontal"
		android:paddingBottom="2dip"
		android:paddingTop="8dp"
		android:background="@drawable/mmfooter_bg"
		android:layout_width="fill_parent" 
		android:layout_height="wrap_content">
			<RadioButton 
			    android:id="@+id/main_tab_weixin" 
			    android:checked="true" 
			    android:text="@string/main_title" 
			    android:drawableTop="@drawable/tab_weixin"
			    android:textColor="@color/tab_text"
			    style="@style/MMTabButton" />	


		 	<RadioButton 
                android:id="@+id/main_tab_address" 
                android:text="@string/main_contact" 
                android:drawableTop="@drawable/tab_address" 
                android:textColor="@color/tab_text"
                style="@style/MMTabButton" />
			
		 	<RadioButton 
		 	    android:id="@+id/main_tab_find_friend" 
		 	    android:text="@string/main_addcontact" 
		 	    android:drawableTop="@drawable/tab_find_frd"
		 	    android:textColor="@color/tab_text" 
		 	    style="@style/MMTabButton" />
		 	
		 	
		 	<RadioButton 
		 	    android:id="@+id/main_tab_settings" 
		 	    android:text="@string/main_setting" 
		 	    android:drawableTop="@drawable/tab_settings" 
		 	    android:textColor="@color/tab_text"
		 	    style="@style/MMTabButton" />
		</RadioGroup>
		
            
    </LinearLayout>
    
</TabHost>

 

 

本例采用tabwidget+ radionbutton方式,布局里将TabWidget隐藏,用radiongrounp取而代之

radionbutton的配置

<RadioButton 
			    android:id="@+id/main_tab_weixin" 
			    android:checked="true" 
			    android:text="@string/main_title" 
			    android:drawableTop="@drawable/tab_weixin"
			    android:textColor="@color/tab_text"
			    style="@style/MMTabButton" />	

android:drawableTop="@drawable/tab_weixin"

Topselector

 

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

 

android:textColor="@color/tab_text"

文字selector

<?xml version="1.0" encoding="utf-8" ?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_checked="true" android:color="@color/white"/>
    <item android:color="#ff666666"/>   
</selector>

style="@style/MMTabButton"

Radionbutton风格,整体风格定制

    <style name="tab_item_text_style">
        <item name="android:textSize">12.0dip</item>
        <item name="android:textColor">@color/tab_text</item>
        <item name="android:ellipsize">marquee</item>       
        <item name="android:singleLine">true</item>
    </style>
    
        
    <style name="MMTabButton">
        <item name="android:textAppearance">@style/tab_item_text_style</item> 
        <item name="android:gravity">center_horizontal</item>
        <item name="android:background">@drawable/tab_bg</item>
        <item name="android:layout_width">0.0dip</item>
        <item name="android:layout_height">wrap_content</item>
        <item name="android:button">@null</item>
        <item name="android:layout_weight">1.0</item>
    </style>
    	  	

 

 

至此,效果全部实现...

再看activity的实现:

public class WeiXinTabActivity extends TabActivity {
    /** Called when the activity is first created. */
    
    
	private TabHost		m_tabHost;		
	private RadioGroup  m_radioGroup;
		
		
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_tab);
        
        init();
    }

	
	
    private void init()
	{
		m_tabHost = getTabHost();
	
		int count = Constant.mTabClassArray.length;		
		for(int i = 0; i < count; i++)
		{	
			TabSpec tabSpec = m_tabHost.newTabSpec(Constant.mTextviewArray[i]).
													setIndicator(Constant.mTextviewArray[i]).
													setContent(getTabItemIntent(i));
			m_tabHost.addTab(tabSpec);
		}
		
		m_radioGroup = (RadioGroup) findViewById(R.id.main_radiogroup);
		m_radioGroup.setOnCheckedChangeListener(new OnCheckedChangeListener() {
			
			@Override
			public void onCheckedChanged(RadioGroup group, int checkedId) {
				// TODO Auto-generated method stub
				switch(checkedId){
				case R.id.main_tab_weixin:

					m_tabHost.setCurrentTabByTag(Constant.mTextviewArray[0]);
					break;
				case R.id.main_tab_address:
					m_tabHost.setCurrentTabByTag(Constant.mTextviewArray[1]);
					break;
				case R.id.main_tab_find_friend:
					m_tabHost.setCurrentTabByTag(Constant.mTextviewArray[2]);
					break;
				case R.id.main_tab_settings:
					m_tabHost.setCurrentTabByTag(Constant.mTextviewArray[3]);
					break;
				}
			}
		});
		
		 ((RadioButton) m_radioGroup.getChildAt(0)).toggle();
	}
	
	private Intent getTabItemIntent(int index)
	{
		Intent intent = new Intent(this, Constant.mTabClassArray[index]);
		
		return intent;
	}

public class Constant {

	public static String mTextviewArray[] = {"微信", "通讯录", "朋友", "设置"};
	
	public static Class mTabClassArray[]= {Activity1.class,
		Activity2.class,
		Activity3.class,
		Activity4.class};
}

这样就将tabwidgetradionbutton无缝链接起来了,一目了然有木有~

附上链接工程:

http://download.csdn.net/detail/geniuseoe2012/4516524

欲知更多Android-UI技巧,请关注窝的下一堂课,更多精彩尽在http://blog.csdn.net/geniuseoe2012

welcome to join android develop group:298044305


上一课:Lance老师UI系列教程第三课->QQ登录注册界面的实现(android-2012最新版)

下一课:Lance老师UI系列教程第五课->自定义风格单选多选对话框的实现

抱歉!评论已关闭.