emmm看外观有点类似ViewPager+Fragment
目的:
实现页面转换
已知缺点:
不可滑动,如果在对应的fragment中有edittext,edittext中出现光标时,底部会上升到键盘上面,按返回键,键盘消失,底部回归到底部。(可能将xml中framelayout修改为LinearLayout或者RelativeLayout会改善,不过我没试)。
分析:
底部是三个tv。上面的framelayout用fragment代替。用数组保存3个view,开启事务,首先隐藏所有tv的fragment。设置tv的监听,点击tv,事务增加或显示对应的fragment,最后事务提交。
源码:
MainActivity.java:
import android.app.Activity;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends Activity implements OnClickListener {
private MainPageFragment MainPageFragment;
private WriteFragment writeFragment;
private MineFragment mineFragment;
private List<View> bottomTabs;
private View mainpageLayout;
private View writerLayout;
private View mineLayout;
private ImageView mainpageImage;
private ImageView writerImage;
private ImageView mineImage;
private TextView mainpageText;
private TextView writerText;
private TextView mineText;
private FragmentManager fragmentManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getActionBar() != null) {
getActionBar().hide();
}
setContentView(R.layout.activity_main);
initViews();
fragmentManager = getFragmentManager();
setSelectTab(0);
}
private void initViews() {
mainpageLayout = findViewById(R.id.mainpage_layout);
writerLayout = findViewById(R.id.writer_layout);
mineLayout = findViewById(R.id.mine_layout);
mainpageImage = (ImageView) findViewById(R.id.home_mainpage_image);
writerImage = (ImageView) findViewById(R.id.writer_image);
mineImage = (ImageView) findViewById(R.id.mine_image);
mainpageText = (TextView) findViewById(R.id.home_mainpage_text);
writerText = (TextView) findViewById(R.id.writer_text);
mineText = (TextView) findViewById(R.id.mine_text);
mainpageLayout.setOnClickListener(this);
writerLayout.setOnClickListener(this);
mineLayout.setOnClickListener(this);
bottomTabs = new ArrayList<View>(3);
bottomTabs.add(mainpageLayout);
bottomTabs.add(writerLayout);
bottomTabs.add(mineLayout);
}
private void setSelectTab(int index) {
FragmentTransaction transaction = fragmentManager.beginTransaction();
hideFragments(transaction);
switch (index) {
case 0:
mainpageImage.setImageResource(R.drawable.icon_home_tab_mainpage_n);
mainpageText.setTextColor(Color.parseColor("#00c98d"));
writerImage.setImageResource(R.drawable.icon_home_tab_writer_n);
writerText.setTextColor(Color.parseColor("#82858b"));
mineImage.setImageResource(R.drawable.icon_home_tab_mine_n);
mineText.setTextColor(Color.parseColor("#82858b"));
if (MainPageFragment == null) {
MainPageFragment = new MainPageFragment();
transaction.add(R.id.content, MainPageFragment);
} else {
transaction.show(MainPageFragment);
}
break;
case 1:
writerImage.setImageResource(R.drawable.icon_home_tab_writer_n);
writerText.setTextColor(Color.parseColor("#00c98d"));
mainpageImage.setImageResource(R.drawable.icon_home_tab_mainpage_n);
mainpageText.setTextColor(Color.parseColor("#82858b"));
mineImage.setImageResource(R.drawable.icon_home_tab_mine_n);
mineText.setTextColor(Color.parseColor("#82858b"));
if (writeFragment == null) {
writeFragment = new WriteFragment();
transaction.add(R.id.content, writeFragment);
} else {
transaction.show(writeFragment);
}
break;
case 2:
mainpageImage.setImageResource(R.drawable.icon_home_tab_mainpage_n);
mainpageText.setTextColor(Color.parseColor("#82858b"));
writerImage.setImageResource(R.drawable.icon_home_tab_writer_n);
writerText.setTextColor(Color.parseColor("#82858b"));
mineImage.setImageResource(R.drawable.icon_home_tab_mine_n);
mineText.setTextColor(Color.parseColor("#00c98d"));
if (mineFragment == null) {
mineFragment = new MineFragment();
transaction.add(R.id.content, mineFragment);
} else {
transaction.show(mineFragment);
}
break;
default:
break;
}
transaction.commit();
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.mainpage_layout:
setSelectTab(0);
break;
case R.id.writer_layout:
setSelectTab(1);
break;
case R.id.mine_layout:
setSelectTab(2);
break;
default:
break;
}
}
private void hideFragments(FragmentTransaction transaction) {
if (MainPageFragment != null) {
transaction.hide(MainPageFragment);
}
if (writeFragment != null) {
transaction.hide(writeFragment);
}
if (mineFragment != null) {
transaction.hide(mineFragment);
}
}
}
MainPageFragment.java:
import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public class MainPageFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View bookshelfLayout = inflater.inflate(R.layout.mainpage_layout,
container, false);
return bookshelfLayout;
}
}
MineFragment与WriterFragment类似于MainPageFragment
activity_main.xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<FrameLayout
android:id="@+id/content"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" >
</FrameLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="80dp"
android:background="@drawable/home_bg_shape" >
<RelativeLayout
android:id="@+id/mainpage_layout"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:orientation="vertical" >
<ImageView
android:id="@+id/home_mainpage_image"
android:layout_width="wrap_content"
android:layout_height="30dp"
android:layout_gravity="center_horizontal"
android:src="@drawable/icon_home_tab_mainpage_n" />
<TextView
android:id="@+id/home_mainpage_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text="主页"
android:textSize="20sp"
android:textColor="#82858b" />
</LinearLayout>
</RelativeLayout>
<RelativeLayout
android:id="@+id/writer_layout"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:orientation="vertical" >
<ImageView
android:id="@+id/writer_image"
android:layout_width="wrap_content"
android:layout_height="30dp"
android:layout_gravity="center_horizontal"
android:src="@drawable/icon_home_tab_writer_n" />
<TextView
android:id="@+id/writer_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text="写笔记"
android:textSize="20sp"
android:textColor="#82858b" />
</LinearLayout>
</RelativeLayout>
<RelativeLayout
android:id="@+id/mine_layout"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:orientation="vertical" >
<ImageView
android:id="@+id/mine_image"
android:layout_width="wrap_content"
android:layout_height="30dp"
android:layout_gravity="center_horizontal"
android:src="@drawable/icon_home_tab_mine_n" />
<TextView
android:id="@+id/mine_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text="我的"
android:textSize="20sp"
android:textColor="#82858b" />
</LinearLayout>
</RelativeLayout>
</LinearLayout>
</LinearLayout>
mainpage_layout.java:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:orientation="vertical" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:padding="10dp"
android:text="mainpage"
android:textSize="20sp" />
</LinearLayout>
</RelativeLayout>
mine_layout与write_layout 和mainpage_layout类似