Android UI-仿微信底部導航欄佈局

 如今App基本的標配除了側滑菜單,還有一個就是底部導航欄,常見的聊天工具QQ,微信,購物App都有底部導航欄,用戶能夠隨便切換看不一樣的內容,說是情懷也好,用戶體驗也罷。咱們開發的主要的仍是講的是如何如何實現其功能,網上實現的方式無外乎兩種,一種是使用tabhost進行切換,一種是直接使用Fragment進行切換,底部導航欄的佈局有的使用的是線性佈局,有的是使用的RadioGroup,本文中是使用fragment+RadioGroup是實現的,看正文吧:java

基礎佈局

其中主要低 底部導航欄,其餘都沒有什麼,上面是一個Fragment本身替換一下便可,關於Fragment的使用可參考本人以前的博客;android

activity_main.xml中的佈局文件,因爲樣式比較多能夠單獨的放在style中的,鑑於方便查看,直接放在佈局文件中,activity_main中的代碼:微信

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    tools:context="com.example.googlebottomfragment.MainActivity" >


    <FrameLayout
        android:id="@+id/main_content"
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:layout_weight="1" />

    <RadioGroup
        android:id="@+id/tab_menu"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/mmfooter_bg"
        android:orientation="horizontal" >

        <RadioButton
            android:id="@+id/rbChat"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_gravity="bottom"
            android:layout_weight="1"
            android:background="@drawable/tab_selector_checked_bg"
            android:button="@null"
            android:checked="true"
            android:drawableTop="@drawable/tab_selector_weixing"
            android:gravity="center_horizontal|bottom"
            android:paddingTop="2dp"
            android:text="微信"
            android:textColor="@color/tab_selector_tv_color" />

        <RadioButton
            android:id="@+id/rbAddress"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_gravity="bottom"
            android:layout_weight="1"
            android:background="@drawable/tab_selector_checked_bg"
            android:button="@null"
            android:drawableTop="@drawable/tab_selector_tongxunlu"
            android:gravity="center_horizontal|bottom"
            android:paddingTop="2dp"
            android:text="通信錄"
            android:textColor="@color/tab_selector_tv_color" />

        <RadioButton
            android:id="@+id/rbFind"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_gravity="bottom"
            android:layout_weight="1"
            android:background="@drawable/tab_selector_checked_bg"
            android:button="@null"
            android:drawableTop="@drawable/tab_selector_faxian"
            android:gravity="center_horizontal|bottom"
            android:paddingTop="2dp"
            android:text="發現"
            android:textColor="@color/tab_selector_tv_color" />

        <RadioButton
            android:id="@+id/rbMe"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_gravity="bottom"
            android:layout_weight="1"
            android:background="@drawable/tab_selector_checked_bg"
            android:button="@null"
            android:drawableTop="@drawable/tab_selector_wo"
            android:gravity="center_horizontal|bottom"
            android:paddingTop="2dp"
            android:text="我"
            android:textColor="@color/tab_selector_tv_color" />
    </RadioGroup>
    
      

</LinearLayout>

  看下新建的佈局和資源文件:ide

其中tab_selector_tv_color.xml主要是用於控制切換的時候顯示下面字體的顏色:工具

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:state_checked="true" android:color="@android:color/white"/>
    <item android:state_checked="false" android:color="@android:color/darker_gray"/>
    <item android:color="@android:color/darker_gray"/>

</selector>

  其中tab_selector_checked_bg.xml佈局文件選中的時候每一個RadioButtton的背景顏色:佈局

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >

    <item 
    android:state_checked="true" 
    android:drawable="@drawable/tab_bg_halo"/> 
    
</selector>

 其中tab_selector_weixing.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/tab_weixin_normal"></item>
    <item android:state_checked="true" android:drawable="@drawable/tab_weixin_pressed"></item>

</selector>

  其中須要切換的chat.xml,address.xml,find.xml,me.xml都是同樣的,其中chat.xml代碼以下:google

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    
    <TextView 
        android:layout_height="wrap_content"
		android:layout_width="wrap_content"
		android:text="微信"
		android:textSize="20sp"
      />
      <TextView 
        android:layout_height="wrap_content"
		android:layout_width="wrap_content"
		android:text="http://www.cnblogs.com/xiaofeixiang"
		android:textSize="15sp"
      />
    

</LinearLayout>

 實現Demo

MainActivity.java中的代碼,主要的就是設置一下OnCheckedChangeListener,注意MainActivity中須要繼承FragmentActivity:spa

	public void initView() {
		chat = new FragmentChat();
		getSupportFragmentManager().beginTransaction().replace(R.id.main_content, chat).commit();
		myTabRg = (RadioGroup) findViewById(R.id.tab_menu);
		myTabRg.setOnCheckedChangeListener(new OnCheckedChangeListener() {


			@Override
			public void onCheckedChanged(RadioGroup group, int checkedId) {
				// TODO Auto-generated method stub
				switch (checkedId) {
				case R.id.rbChat:
					chat = new FragmentChat();
					getSupportFragmentManager().beginTransaction().replace(R.id.main_content, chat)
							.commit();
					break;
				case R.id.rbAddress:
					if (address==null) {
						address =new FragmentAddress();
					}
					Log.i("MyFragment", "FragmentAddress");
					getSupportFragmentManager().beginTransaction().replace(R.id.main_content, address).commit();
					break;
				case R.id.rbFind:
					find = new FragmentFind();
					getSupportFragmentManager().beginTransaction().replace(R.id.main_content, find)
							.commit();
					break;
				case R.id.rbMe:
					me = new FragmentMe();
					getSupportFragmentManager().beginTransaction().replace(R.id.main_content, me)
							.commit();
					break;
				default:
					break;
				}

			}
		});

 FragmentChat中的代碼,其他的三個FragmentAddress,FragmentFind,FragmentMe相似,就不貼代碼了,主要是繼承Fragment 便可:orm

public class FragmentChat extends Fragment {

	@Override
	public void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
	}

	@Override
	public View onCreateView(LayoutInflater inflater,
			@Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		return inflater.inflate(R.layout.chat, null);
	}

}

  最後看張通信錄的截圖吧:

、-

若是有須要,推薦以後,評論區留下郵箱,一天以內會處理~

相關文章
相關標籤/搜索