zoukankan      html  css  js  c++  java
  • 浅谈Android选项卡(二)

    前面简单介绍了选项卡,下面以及后面的几篇文章介绍下Android选项卡的几种简单实现方法。

    http://blog.csdn.net/xia215266092/article/details/9613897


    看到上面的最版本的QQ软件,整个软件的UI框架就是选项卡,一般想到的就是使用Android自带的TabActivity实现。

    实现需要一个主界面,来存放选项卡,在布局中需要存放TabHost和TabWidget。

    <?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:orientation="vertical" >
    
            <TabWidget
                android:id="@android:id/tabs"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:paddingLeft="1dip"
                android:paddingRight="1dip"
                android:paddingTop="4dip"
                android:visibility="gone" />
    
            <FrameLayout
                android:id="@android:id/tabcontent"
                android:layout_width="fill_parent"
                android:layout_height="0dip"
                android:layout_weight="1" />
            <RadioGroup
                android:id="@+id/rg"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:background="#f00"
                android:orientation="horizontal" >
    
                <RadioButton
                    android:id="@+id/rb01"
                    style="@style/menu_item"
                    android:checked="true"
                    android:drawableTop="@drawable/menu_home"
                    android:text="主页" />
    
                <RadioButton
                    android:id="@+id/rb02"
                    style="@style/menu_item"
                    android:drawableTop="@drawable/menu_clear"
                    android:text="清除" />
    
                <RadioButton
                    android:id="@+id/rb03"
                    style="@style/menu_item"
                    android:drawableTop="@drawable/menu_refresh"
                    android:text="刷新" />
    
                <RadioButton
                    android:id="@+id/rb04"
                    style="@style/menu_item"
                    android:drawableTop="@drawable/menu_save"
                    android:text="保存" />
    
                <RadioButton
                    android:id="@+id/rb05"
                    style="@style/menu_item"
                    android:drawableTop="@drawable/menu_more"
                    android:text="更多" />
            </RadioGroup>
    
        </LinearLayout>
    
    </TabHost>
    同时需要个Activity,这个Activity必须继承TabActivity,其实也不一定需要继承这个,可以继承ActivityGroup,自定义一个tabactivity,但是这样比较复杂,所以我们还是继承TabActivity吧。

    public class TabMainActivity extends TabActivity {
    
    	TabHost tab;
    	Context context;
    	RadioGroup rg;
    
    	public void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.tab_main);
    		
    		tab = getTabHost();
    		context = this;
    
    		tab.addTab(tab.newTabSpec("A").setIndicator("A").setContent(new Intent(context, AActivity.class)));
    		tab.addTab(tab.newTabSpec("B").setIndicator("B").setContent(new Intent(context, BActivity.class)));
    		tab.addTab(tab.newTabSpec("C").setIndicator("C").setContent(new Intent(context, CActivity.class)));
    		tab.addTab(tab.newTabSpec("D").setIndicator("D").setContent(new Intent(context, DActivity.class)));
    		tab.addTab(tab.newTabSpec("E").setIndicator("E").setContent(new Intent(context, EActivity.class)));
    
    		rg = (RadioGroup) findViewById(R.id.rg);
    		rg.setOnCheckedChangeListener(new OnCheckedChangeListener() {
    			public void onCheckedChanged(RadioGroup group, int checkedId) {
    				int idx = -1;
    				if (checkedId == R.id.rb01) {
    					idx = 0;
    				} else if (checkedId == R.id.rb02) {
    					idx = 1;
    				} else if (checkedId == R.id.rb03) {
    					idx = 2;
    				} else if (checkedId == R.id.rb04) {
    					idx = 3;
    				} else if (checkedId == R.id.rb05) {
    					idx = 4;
    				}
    				switchActivity(idx);
    			}
    		});
    	}
    
    	protected void switchActivity(int idx) {
    		int n = tab.getCurrentTab();
    
    		if (idx < n) {
    			tab.getCurrentView().startAnimation(AnimationUtils.loadAnimation(this, R.anim.slide_left_out));
    		} else if (idx > n) {
    			tab.getCurrentView().startAnimation(AnimationUtils.loadAnimation(this, R.anim.slide_right_out));
    		}
    		tab.setCurrentTab(idx);
    		if (idx < n) {
    			tab.getCurrentView().startAnimation(AnimationUtils.loadAnimation(this, R.anim.slide_left_in));
    		} else if (idx > n) {
    			tab.getCurrentView().startAnimation(AnimationUtils.loadAnimation(this, R.anim.slide_right_in));
    		}
    		
    		RadioButton rb = (RadioButton) rg.getChildAt(idx);
    		rb.setChecked(true);
    	}
    
    	private Map<String, Object> data = new HashMap<String, Object>();
    
    	protected void put(String key, String value) {
    		data.put(key, value);
    	}
    
    	protected Object get(String key) {
    		return data.get(key);
    	}
    }

    AActivity,BActivity,CActivity,DActivity,EActivity,都是点击选项卡,对应的Activity,这样UI框架,可以按照软件的功能来分模块,便于团队人员的合作和开发。

       


    底部的菜单使用的RadioGroup,因在RadioGroup里面的有若干RadioButton,只有能有一个才能被选中,这样就很完美的实现的上面被选中的效果,Android有自定义Radiobutton选中的背景。偷笑

    自定义一个Radiobutton

    <RadioButton
                    android:id="@+id/rb01"
                    style="@style/menu_item"
                    android:checked="true"
                    android:drawableTop="@drawable/menu_home"
                    android:text="主页" />
    然后在自定义一个style,让RadioButtong使用使用这个Style。


    <style name="menu_item">
            <item name="android:layout_width">fill_parent</item>
            <item name="android:layout_height">fill_parent</item>
            <item name="android:padding">10dp</item>
            <item name="android:button">@null</item>
            <item name="android:gravity">center_horizontal</item>
            <item name="android:background">@drawable/menu_item_bg</item>
            <item name="android:layout_weight">1</item>
        </style>
    <item name="android:background">@drawable/menu_item_bg</item>

    就是这个RadioButton的背景。

    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
    	<item android:state_pressed="false" android:state_checked="false" android:drawable="@drawable/menu_normal" />
    	<item android:state_checked="true" android:drawable="@drawable/menu_press" />
    	<item android:state_pressed="true" android:drawable="@drawable/menu_press" />
    </selector>
    定义不同状态的显示的背景,当选中或者是被点击的时候,使用的背景menu_press,否则就是menu_normal。
    好了,这篇先简单介绍在这里,后面还有后续。

  • 相关阅读:
    java.io.Serializable浅析
    SSH和SSM的区别
    [转]github详细教程
    GITHUB的使用
    常用端口-小结
    DNS的解析原理
    windows快捷键-小结
    ip地址0.0.0.0是什么意思
    windows插件框架下载地址
    redis和mongodb
  • 原文地址:https://www.cnblogs.com/liushuibufu/p/3253602.html
Copyright © 2011-2022 走看看