侧滑+横滑

1.创建主页面布局+侧滑

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity"
    android:id="@+id/drawer">
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        >
        <android.support.design.widget.TabLayout
            android:id="@+id/bottom_indicator"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
               //设置高度 居中
            app:tabGravity="fill"

            android:layout_alignParentBottom="true">
    </android.support.design.widget.TabLayout>
      <android.support.v4.view.ViewPager
        android:id="@+id/contents"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
          android:layout_above="@id/bottom_indicator">
      </android.support.v4.view.ViewPager>
   </RelativeLayout>
    <FrameLayout
        android:id="@+id/left1"
        android:layout_width="200dp"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:background="#ffffff"/>



</android.support.v4.widget.DrawerLayout>

2.侧拉页面需要一个fragment布局页面

<?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">
    <ListView
        android:id="@+id/menus"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"></ListView>

</LinearLayout>

3.侧拉的fragment页面

package com.bw.ymy.cehua;

import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ListView;

public class leftFragment extends Fragment {
    private ListView listView;

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        return inflater.inflate(R.layout.left,container,false);
    }

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {

        //获取资源id
        listView=view.findViewById(R.id.menus);
        //适配器
        listView.setAdapter(new leftAdapter(getActivity()));
       // 点击跳转
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                if(position==0)
                {
                    return;
                }
                ((MainActivity)getActivity()).showPage(position-1);
            }
        });
        super.onViewCreated(view,savedInstanceState);
    }
}

4.MainActivity页面加载侧拉和Tablayout切换fragment

package com.bw.ymy.cehua;

import android.support.design.widget.TabLayout;
import android.support.v4.view.ViewPager;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Gravity;
import android.view.MenuItem;
import android.widget.TableLayout;

public class MainActivity extends AppCompatActivity {
    private DrawerLayout drawerLayout;
    private ActionBarDrawerToggle toggle;
    private ViewPager contents;
    private TabLayout tabLayout;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        if(savedInstanceState==null)
        {
            getSupportFragmentManager().beginTransaction()
                    .add(R.id.left1,new leftFragment() )
                    .commit();
            initView();

        }

    }
    //初始化view
    private void initView() {
        //允许标题栏展示左边icon
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
            //获取资源id
        drawerLayout = findViewById(R.id.drawer);

        //actionbar 和 DrawerLahyout中间人, 把中间人创建出来
        toggle = new ActionBarDrawerToggle(this, drawerLayout, R.string.open_drawer, R.string.close_drawer);
        drawerLayout.addDrawerListener(toggle);
        toggle.syncState();
        //获取资源id
        contents = findViewById(R.id.contents);

        //绑定adapter
       contents.setAdapter(new MainPage(getSupportFragmentManager()));
        tabLayout=findViewById(R.id.bottom_indicator);
        tabLayout.setupWithViewPager(contents);



    }
    //点击切换  0 - 3
    public void showPage(int position) {
        contents.setCurrentItem(position);
        drawerLayout.closeDrawer(Gravity.START);
    }

    //支持点击
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        if(toggle.onOptionsItemSelected(item)) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }


}

5.侧拉页面的适配器 多条目展示侧拉

package com.bw.ymy.cehua;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

public class leftAdapter extends BaseAdapter {

    private String[] menus = new String[]
            {
                    "首页", "视频", "我的"
            };
    private Context context;

    public leftAdapter(Context context) {

        this.context = context;
    }

    private final int ITEM_COUTN = 2;
    private final int IMAGE_TYPE = 0;
    private final int TEXT_TYPE = 1;

    @Override
    public int getCount() {
        return menus.length + 1;
    }

    @Override
    public int getViewTypeCount() {
        return ITEM_COUTN;
    }

    @Override
    public int getItemViewType(int position) {
        return position == 0 ? IMAGE_TYPE : TEXT_TYPE;
    }


    @Override
    public String getItem(int position) {
        //预防position ==0的情况
        if (position == 0) {
            return null;
        }
        return menus[position - 1];
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        ViewHolder holder = null;
        if (convertView == null) {
            convertView = LayoutInflater.from(context).inflate(
                    getItemViewType(position) == IMAGE_TYPE ? R.layout.image : R.layout.text
                    , parent, false);
            holder = new ViewHolder(convertView);
        }else {
            holder = (ViewHolder) convertView.getTag();
        }
        //
        if (getItemViewType(position) == TEXT_TYPE) {
            holder.bind(getItem(position));
        }
        return convertView;
    }

    //创建寄存器
    class ViewHolder {
        ImageView image;
        TextView text1;

        //获取资源id
        public ViewHolder(View convertView) {
            image = convertView.findViewById(R.id.icon);
            text1 = convertView.findViewById(R.id.text111);
            convertView.setTag(this);
        }

        //赋值
        public  void  bind(String item)
        {
            text1.setText(item);
        }

    }
}

6.侧拉多条目展示的两个布局一个布局为头像一个为条目

<?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="wrap_content"
    android:paddingTop="10dp"
    android:paddingBottom="10dp">
    <ImageView
        android:id="@+id/icon"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:src="@mipmap/ic_launcher"/>

</LinearLayout>


文字
<?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">
    <TextView
        android:id="@+id/text111"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="22"/>

</LinearLayout>

7.Tablayout切换fragment的适配器

package com.bw.ymy.cehua;

import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;

public class oneAdapter extends FragmentPagerAdapter {

    private  String[] page=new String[]
            {
                    "推荐","小视频", "我的"
            };
    public oneAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int i) {
        switch (i)
        {
            case 0:
                return new tuijian();
            case 1:
                return new video();
            case 2:
                return new beijing();
                default:
                    return  new Fragment();
        }

    }

    @Nullable
    @Override
    public CharSequence getPageTitle(int position) {
        return page[position];
    }

    @Override
    public int getCount() {
        return page.length;
    }
}

8.fragment嵌套fragment 实现tablayout切换fragment fragment页面

package com.bw.ymy.cehua;

import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.design.widget.TabLayout;
import android.support.v4.app.Fragment;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class one extends Fragment {
    private TabLayout tabLayout;
    private ViewPager viewpage;
    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        return inflater.inflate(R.layout.one,container,false);
    }

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {

            viewpage=view.findViewById(R.id.v_viewpage);
             tabLayout=view.findViewById(R.id.top111);
            viewpage.setAdapter(new oneAdapter(getChildFragmentManager()));

            //显示上面的字
            tabLayout.setupWithViewPager(viewpage);
        super.onViewCreated(view, savedInstanceState);
    }
}

9.fragment嵌套fragment 布局页面``

<?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"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    
   <android.support.design.widget.TabLayout
       android:id="@+id/top111"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       app:tabMode="scrollable"/>

    <android.support.v4.view.ViewPager
        android:id="@+id/v_viewpage"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        />

</LinearLayout>

10.fragment嵌套fragment 实现tablayout切换fragment 适配器页面

package com.bw.ymy.cehua;

import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;

public class oneAdapter extends FragmentPagerAdapter {

    private  String[] page=new String[]
            {
                    "推荐","小视频", "我的"
            };
    public oneAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int i) {
        switch (i)
        {
            case 0:
                return new tuijian();
            case 1:
                return new video();
            case 2:
                return new beijing();
                default:
                    return  new Fragment();
        }

    }

    @Nullable
    @Override
    public CharSequence getPageTitle(int position) {
        return page[position];
    }

    @Override
    public int getCount() {
        return page.length;
    }
}

猜你喜欢

转载自blog.csdn.net/qq_42902175/article/details/84100671