zoukankan      html  css  js  c++  java
  • Android 底部导航栏实现一 Fragment-replace

    【效果】(这里下载的软件收费的试用有水印)

                       

     【推荐】这里推荐一个图标网http://iconfont.cn/。以上图标来自此图标网

    【项目结构】

                       

    【步骤】

    ①创建布局文件,写底部导航栏

      1 <?xml version="1.0" encoding="utf-8"?>
      2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
      3     xmlns:app="http://schemas.android.com/apk/res-auto"
      4     xmlns:tools="http://schemas.android.com/tools"
      5     android:layout_width="match_parent"
      6     android:layout_height="match_parent"
      7     tools:context=".MainActivity"
      8     android:orientation="vertical">
      9 
     10     <RelativeLayout
     11         android:id="@+id/rl_content"
     12         android:layout_width="match_parent"
     13         android:layout_height="0dp"
     14         android:layout_weight="1">
     15        <!--这里设置权重weight为1, 下面不设置权重。-->
     16         <!--意思是,剩余的位置全都是RelativeLayout的-->
     17     </RelativeLayout>
     18 
     19     <TextView
     20         android:layout_width="match_parent"
     21         android:layout_height="1dp"
     22         android:background="#797878"/>
     23     <LinearLayout
     24         android:layout_width="match_parent"
     25         android:layout_height="80dp"
     26         android:orientation="horizontal">
     27         <LinearLayout
     28             android:id="@+id/item1"
     29             android:layout_width="0dp"
     30             android:layout_weight="1"
     31             android:layout_height="match_parent"
     32             android:orientation="vertical">
     33             <ImageView
     34                 android:id="@+id/item1_iv"
     35                 android:layout_width="match_parent"
     36                 android:layout_height="0dp"
     37                 android:layout_weight="3"
     38                 android:layout_margin="3dp"
     39                 android:scaleType="fitCenter"
     40                 android:src="@drawable/wxb"
     41                 android:padding="1dp"/>
     42             <TextView
     43                 android:id="@+id/item1_tv"
     44                 android:text="女王"
     45                 android:textSize="16sp"
     46                 android:layout_width="match_parent"
     47                 android:layout_height="0dp"
     48                 android:layout_weight="1"
     49                 android:gravity="center"/>
     50         </LinearLayout>
     51         <LinearLayout
     52             android:id="@+id/item2"
     53             android:layout_width="0dp"
     54             android:layout_weight="1"
     55             android:layout_height="match_parent"
     56             android:orientation="vertical">
     57             <ImageView
     58                 android:id="@+id/item2_iv"
     59                 android:layout_width="match_parent"
     60                 android:layout_height="0dp"
     61                 android:layout_weight="3"
     62                 android:layout_margin="3dp"
     63                 android:scaleType="fitCenter"
     64                 android:src="@drawable/meizhuang"
     65                 android:padding="4dp"/>
     66             <TextView
     67                 android:id="@+id/item2_tv"
     68                 android:text="美妆"
     69                 android:textSize="16sp"
     70                 android:layout_width="match_parent"
     71                 android:layout_height="0dp"
     72                 android:layout_weight="1"
     73                 android:gravity="center"/>
     74         </LinearLayout>
     75         <LinearLayout
     76             android:id="@+id/item3"
     77             android:layout_width="0dp"
     78             android:layout_weight="1"
     79             android:layout_height="match_parent"
     80             android:orientation="vertical">
     81             <ImageView
     82                 android:id="@+id/item3_iv"
     83                 android:layout_width="match_parent"
     84                 android:layout_height="0dp"
     85                 android:layout_weight="3"
     86                 android:layout_margin="3dp"
     87                 android:scaleType="fitCenter"
     88                 android:src="@drawable/fuzhuang"
     89                 android:padding="5dp"/>
     90             <TextView
     91                 android:id="@+id/item3_tv"
     92                 android:text="衣帽"
     93                 android:textSize="16sp"
     94                 android:layout_width="match_parent"
     95                 android:layout_height="0dp"
     96                 android:layout_weight="1"
     97                 android:gravity="center" />
     98         </LinearLayout>
     99         <LinearLayout
    100             android:id="@+id/item4"
    101             android:layout_width="0dp"
    102             android:layout_weight="1"
    103             android:layout_height="match_parent"
    104             android:orientation="vertical">
    105             <ImageView
    106                 android:id="@+id/item4_iv"
    107                 android:layout_width="match_parent"
    108                 android:layout_height="0dp"
    109                 android:layout_weight="3"
    110                 android:layout_margin="3dp"
    111                 android:scaleType="fitCenter"
    112                 android:src="@drawable/xiebaopeishi"
    113                 android:padding="3dp"/>
    114             <TextView
    115                 android:id="@+id/item4_tv"
    116                 android:text="鞋包"
    117                 android:textSize="16sp"
    118                 android:layout_width="match_parent"
    119                 android:layout_height="0dp"
    120                 android:layout_weight="1"
    121                 android:gravity="center" />
    122         </LinearLayout>
    123     </LinearLayout>
    124 </LinearLayout>

    ②定义Fragment

      【提示】可以通过下图方式创建

     

     1 public class FragmentA extends Fragment {
     2     
     3     public FragmentA() {
     4         // Required empty public constructor
     5     }
     6 
     7     @Override
     8     public View onCreateView(LayoutInflater inflater, ViewGroup container,
     9                              Bundle savedInstanceState) {
    10         // Inflate the layout for this fragment
    11         return inflater.inflate(R.layout.fragment_a, container, false);
    12     }
    13 }

    对于生成的Fragment不用作修改,对应的布局中设置一个背景颜色便于观察。

     

    ③MainActivity代码的编写

     1 public class MainActivity extends AppCompatActivity implements View.OnClickListener{
     2 
     3     private FragmentManager fragmentManager;
     4     private RelativeLayout rl_content;
     5     private ImageView item1_iv,item2_iv,item3_iv,item4_iv;
     6     private TextView item1_tv,item2_tv,item3_tv,item4_tv;
     7     private LinearLayout item1,item2,item3,item4;
     8     private ImageView[] ivs;
     9     private TextView[] tvs;
    10     
    11     @Override
    12     protected void onCreate(Bundle savedInstanceState) {
    13         super.onCreate(savedInstanceState);
    14         setContentView(R.layout.activity_main);
    15 
    16         initView();
    17 
    18         fragmentManager = getSupportFragmentManager();
    19 
    20         initListener();
    21     }
    22 
    23     private void initListener() {
    24         item1.setOnClickListener(this);
    25         item2.setOnClickListener(this);
    26         item3.setOnClickListener(this);
    27         item4.setOnClickListener(this);
    28     }
    29 
    30     private void initView() {
    31         rl_content = (RelativeLayout) findViewById(R.id.rl_content);
    32         item1_iv = (ImageView) findViewById(R.id.item1_iv);
    33         item1_tv = (TextView) findViewById(R.id.item1_tv);
    34         item1 = (LinearLayout) findViewById(R.id.item1);
    35         item2_iv = (ImageView) findViewById(R.id.item2_iv);
    36         item2_tv = (TextView) findViewById(R.id.item2_tv);
    37         item2 = (LinearLayout) findViewById(R.id.item2);
    38         item3_iv = (ImageView) findViewById(R.id.item3_iv);
    39         item3_tv = (TextView) findViewById(R.id.item3_tv);
    40         item3 = (LinearLayout) findViewById(R.id.item3);
    41         item4_iv = (ImageView) findViewById(R.id.item4_iv);
    42         item4_tv = (TextView) findViewById(R.id.item4_tv);
    43         item4 = (LinearLayout) findViewById(R.id.item4);
    44         ivs = new ImageView[]{item1_iv,item2_iv,item3_iv,item4_iv};
    45         tvs = new TextView[]{item1_tv,item2_tv,item3_tv,item4_tv};
    46     }
    47 
    48     @Override
    49     public void onClick(View view) {
    50         switch (view.getId()){
    51             case R.id.item1: {
    52                 FragmentTransaction transaction = fragmentManager.beginTransaction();//创建一个事务
    53                 transaction.replace(R.id.rl_content,new FragmentA());
    54                 transaction.commit();//事务一定要提交,replace才会有效
    55                 setCheck(0);//自定义方法
    56                 break;
    57             }
    58             case R.id.item2: {
    59                 FragmentTransaction transaction = fragmentManager.beginTransaction();
    60                 transaction.replace(R.id.rl_content,new FragmentB());
    61                 transaction.commit();
    62                 setCheck(1);
    63                 break;
    64             }
    65             case R.id.item3: {
    66                 FragmentTransaction transaction = fragmentManager.beginTransaction();
    67                 transaction.replace(R.id.rl_content,new FragmentC());
    68                 transaction.commit();
    69                 setCheck(2);
    70                 break;
    71             }
    72             case R.id.item4: {
    73                 FragmentTransaction transaction = fragmentManager.beginTransaction();
    74                 transaction.replace(R.id.rl_content,new FragmentD());
    75                 transaction.commit();
    76                 setCheck(3);
    77                 break;
    78             }
    79             default:break;
    80         }
    81     }
    82 
    83     public void setCheck(int itemId){
    84         //这个方法设置底部导航栏选中时的效果
    85         for (int i = 0; i < 4; i++) {
    86             ivs[i].setColorFilter(Color.parseColor("#0f0f0f"));
    87             tvs[i].setTextColor(Color.parseColor("#0f0f0f"));
    88         }
    89         ivs[itemId].setColorFilter(Color.GREEN);
    90         tvs[itemId].setTextColor(Color.GREEN);
    91     }
    92 }

    【提示】①这里的点击事件是通过Activity实现Onclick接口的方式

              ②getSupportFragmentManager()是v4包中的,兼容效果好,如果用getFragmentManager()可能会崩掉

              ③FragmentManager只需要获取一次,但是事务FragmentTransaction要重新开启。最后事务一定要提交commit。

              ④方法setCheck是为了设置导航的被选中效果。

     

  • 相关阅读:
    Codeforces 1167E(思路、数据处理)
    Codeforces 185D(发现性质、欧拉定理)
    BUPT2017 springtraining(16) #4 ——基础数论
    Codeforces Round #404 (Div. 2)——ABCDE
    BUPT2017 springtraining(15) #3
    BUPT2017 springtraining(16) #3 ——搜索与动态规划
    BUPT2017 springtraining(16) #2 ——基础数据结构
    Codeforces Round #413(Div. 1 + Div. 2, combined)——ABCD
    BUPT2017 springtraining(16) #1 ——近期codeforces简单题目回顾
    Codeforces Round #400 (Div. 1 + Div. 2, combined)——ABCDE
  • 原文地址:https://www.cnblogs.com/xqz0618/p/nav1.html
Copyright © 2011-2022 走看看