实现微信布局的四种方式(一)

来源:互联网 发布:网络教育英语统考题库 编辑:程序博客网 时间:2024/06/03 18:11

    今日,在学习TabHost,Fragment与ViewPager时发现了几种实现类似微信布局的几种方式,相信有这几种布局的实现,大家也可以实现其他类似的布局,

第一种形式:使用ViewPager实现

1:布局代码的实现:

(1)top.xml的实现

<span style="font-size:24px;"><?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="45dp"    android:background="@drawable/title_bar"    android:gravity="center"    android:orientation="vertical" >    <TextView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_gravity="center"        android:text="微信"        android:textColor="#ffffff"        android:textSize="20sp"        android:textStyle="bold" /></LinearLayout></span>

(2)bottom.xml的实现

<span style="font-size:24px;"><?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="55dp"    android:background="@drawable/bottom_bar"    android:orientation="horizontal" >    <LinearLayout        android:id="@+id/id_tab_weixin"        android:layout_width="0dp"        android:layout_height="fill_parent"        android:layout_weight="1"        android:gravity="center"        android:orientation="vertical" >        <ImageButton            android:id="@+id/id_tab_weixin_img"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:background="#00000000"            android:clickable="false"            android:src="@drawable/tab_weixin_pressed" />        <TextView            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:text="微信"            android:textColor="#ffffff" />    </LinearLayout>    <LinearLayout        android:id="@+id/id_tab_frd"        android:layout_width="0dp"        android:layout_height="fill_parent"        android:layout_weight="1"        android:gravity="center"        android:orientation="vertical" >        <ImageButton            android:id="@+id/id_tab_frd_img"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:background="#00000000"            android:clickable="false"            android:src="@drawable/tab_find_frd_normal" />        <TextView            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:text="朋友"            android:textColor="#ffffff" />    </LinearLayout>    <LinearLayout        android:id="@+id/id_tab_address"        android:layout_width="0dp"        android:layout_height="fill_parent"        android:layout_weight="1"        android:gravity="center"        android:orientation="vertical" >        <ImageButton            android:id="@+id/id_tab_address_img"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:background="#00000000"            android:clickable="false"            android:src="@drawable/tab_address_normal" />        <TextView            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:text="通讯录"            android:textColor="#ffffff" />    </LinearLayout>    <LinearLayout        android:id="@+id/id_tab_settings"        android:layout_width="0dp"        android:layout_height="fill_parent"        android:layout_weight="1"        android:gravity="center"        android:orientation="vertical" >        <ImageButton            android:id="@+id/id_tab_settings_img"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:background="#00000000"            android:clickable="false"            android:src="@drawable/tab_settings_normal" />        <TextView            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:text="设置"            android:textColor="#ffffff" />    </LinearLayout></LinearLayout></span>
(3)四个tab.xml,由于其实现方式相同,这里只展示一个

<span style="font-size:24px;"><?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_width="fill_parent"        android:layout_height="fill_parent"        android:gravity="center"        android:text="This is Weixin Tab"        android:textSize="30sp"        android:textStyle="bold" /></LinearLayout></span>

(4)avtivity_main.xml的实现

<span style="font-size:24px;"><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical" >    <include layout="@layout/top" />    <android.support.v4.view.ViewPager        android:id="@+id/id_viewpager"        android:layout_width="fill_parent"        android:layout_height="0dp"        android:layout_weight="1" >    </android.support.v4.view.ViewPager>    <include layout="@layout/bottom" /></LinearLayout></span>

注意,这里有一个小技巧android:layout_height="0dp"和android:layout_weight="1" 可以将底部布局显示在底部,否则,ViewPager将会占据bottom.xml所在的位置



<span style="font-size:24px;">import java.util.ArrayList;import java.util.List;import android.app.Activity;import android.os.Bundle;import android.support.v4.view.PagerAdapter;import android.support.v4.view.ViewPager;import android.support.v4.view.ViewPager.OnPageChangeListener;import android.view.LayoutInflater;import android.view.View;import android.view.View.OnClickListener;import android.view.ViewGroup;import android.view.Window;import android.widget.ImageButton;import android.widget.LinearLayout;public class MainActivity extends Activity implements OnClickListener{private ViewPager mViewPager;private PagerAdapter mAdapter;private List<View> mViews = new ArrayList<View>();private LinearLayout mTabWeixin;private LinearLayout mTabFrd;private LinearLayout mTabAddress;private LinearLayout mTabSetting;private ImageButton mWeixinImg;private ImageButton mFrdImg;private ImageButton mAddressImg;private ImageButton mSettingImg;@Overrideprotected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);requestWindowFeature(Window.FEATURE_NO_TITLE);setContentView(R.layout.activity_main);initView();initEvents();}private void initEvents(){mTabWeixin.setOnClickListener(this);mTabFrd.setOnClickListener(this);mTabAddress.setOnClickListener(this);mTabSetting.setOnClickListener(this);mViewPager.setOnPageChangeListener(new OnPageChangeListener(){@Overridepublic void onPageSelected(int arg0){int currentItem = mViewPager.getCurrentItem();resetImg();switch (currentItem){case 0:mWeixinImg.setImageResource(R.drawable.tab_weixin_pressed);break;case 1:mFrdImg.setImageResource(R.drawable.tab_find_frd_pressed);break;case 2:mAddressImg.setImageResource(R.drawable.tab_address_pressed);break;case 3:mSettingImg.setImageResource(R.drawable.tab_settings_pressed);break;}}@Overridepublic void onPageScrolled(int arg0, float arg1, int arg2){}@Overridepublic void onPageScrollStateChanged(int arg0){}});}private void initView(){mViewPager = (ViewPager) findViewById(R.id.id_viewpager);// tabsmTabWeixin = (LinearLayout) findViewById(R.id.id_tab_weixin);mTabFrd = (LinearLayout) findViewById(R.id.id_tab_frd);mTabAddress = (LinearLayout) findViewById(R.id.id_tab_address);mTabSetting = (LinearLayout) findViewById(R.id.id_tab_settings);// ImageButtonmWeixinImg = (ImageButton) findViewById(R.id.id_tab_weixin_img);mFrdImg = (ImageButton) findViewById(R.id.id_tab_frd_img);mAddressImg = (ImageButton) findViewById(R.id.id_tab_address_img);mSettingImg = (ImageButton) findViewById(R.id.id_tab_settings_img);LayoutInflater mInflater = LayoutInflater.from(this);View tab01 = mInflater.inflate(R.layout.tab01, null);View tab02 = mInflater.inflate(R.layout.tab02, null);View tab03 = mInflater.inflate(R.layout.tab03, null);View tab04 = mInflater.inflate(R.layout.tab04, null);mViews.add(tab01);mViews.add(tab02);mViews.add(tab03);mViews.add(tab04);mAdapter = new PagerAdapter(){@Overridepublic void destroyItem(ViewGroup container, int position,Object object){container.removeView(mViews.get(position));}@Overridepublic Object instantiateItem(ViewGroup container, int position){View view = mViews.get(position);container.addView(view);return view;}@Overridepublic boolean isViewFromObject(View arg0, Object arg1){return arg0 == arg1;}@Overridepublic int getCount(){return mViews.size();}};mViewPager.setAdapter(mAdapter);}@Overridepublic void onClick(View v){resetImg();switch (v.getId()){case R.id.id_tab_weixin:mViewPager.setCurrentItem(0);mWeixinImg.setImageResource(R.drawable.tab_weixin_pressed);break;case R.id.id_tab_frd:mViewPager.setCurrentItem(1);mFrdImg.setImageResource(R.drawable.tab_find_frd_pressed);break;case R.id.id_tab_address:mViewPager.setCurrentItem(2);mAddressImg.setImageResource(R.drawable.tab_address_pressed);break;case R.id.id_tab_settings:mViewPager.setCurrentItem(3);mSettingImg.setImageResource(R.drawable.tab_settings_pressed);break;default:break;}}/** * 将所有的图片切换为暗色的 */private void resetImg(){mWeixinImg.setImageResource(R.drawable.tab_weixin_normal);mFrdImg.setImageResource(R.drawable.tab_find_frd_normal);mAddressImg.setImageResource(R.drawable.tab_address_normal);mSettingImg.setImageResource(R.drawable.tab_settings_normal);}}</span><span style="font-size:24px;"></span>

代码的实现非常简单,相信大家一目了然,但是有些细节需要注意到;

(1)导入的是v4包,可以实现对3.0以下的系统进行兼容,

(2)代码的实现过程,

一:找出所有组件的ID,使用LayoutInflater 将创建的四个Tab与相应的xml相关联,进而加载到ListView中,使用PagerAdapter将ListView加载进来,最后为ViewPager设置适配器,

二:为底部布局的四个按钮添加监听事件,转换到哪一个按钮,哪一个按钮的xml就会显示出来,并将按钮的颜色设置为亮色。但是必须要想将所有的按钮设置成暗色

三:clickable="false"在Bottom.xml中,可以实现点击文字时也可以出现效果

1 0
原创粉丝点击