实现微信布局的四种方式(一)
来源:互联网 发布:网络教育英语统考题库 编辑:程序博客网 时间: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
- 实现微信布局的四种方式(一)
- 实现微信布局的四种方式(四)
- 实现微信布局的四种方式(二)
- 实现微信布局的四种方式(三)
- Android实现计算器布局(四种布局方式)之TableLayout表格布局
- Android实现计算器布局(四种布局方式)之GridLayout网格布局
- Android实现计算器布局(四种布局方式)之LinearLayout线性布局
- Android实现计算器布局(四种布局方式)之RelativeLayout相对布局
- App主界面布局的实现方式(一)
- App主界面布局的实现方式(一)
- web四种布局方式
- 微信支付方式集成(一)
- 微信朋友圈布局实现
- 一、svg的四种使用方式
- 以编码的方式实现Auto Layout自动布局(一)
- 以编码的方式实现Auto Layout自动布局(一)
- CSS的四种布局方式static/relative/fixed/absolute
- 两种方式实现父布局中两列布局的自适应
- 四.Linux系统中文搜索命令
- 结队练习源代码
- SQL语句截取字符串
- ACM第二次练习—1019
- Linux每天学习一个命令之find命令一
- 实现微信布局的四种方式(一)
- POJ1017 Packets(贪心)
- Linux 判断文件修改时间和系统时间差
- (OK) 运行cBPM—Fedora23—SIMPLE
- 零基础学习 Hadoop 该如何下手?
- 6.Linux下安装JDK和删除JDK
- 逆波兰表达式求值
- 第87课:Flume推送数据到SparkStreaming案例实战和内幕源码解密--flume安装篇
- CNNs学习笔记(4):反向传播BP算法