151228 侧滑菜单:Drawerlayout和ActionBar 一起使用的,侧滑菜单:SlidingPaneLayout,NavigationView,TabLayout

Android SlidingPaneLayout实践 可折叠设备在这里这一事实是无法回避的。在应用程序开发方面,它们带来了一些新的挑战。其中之一是可折叠设备的外形尺寸会根据折叠状态而变化。Android在设计上支持不同的外形尺寸,因此这很容易处理。但是,有一个新的Jetpack库可以使事情变得更容易:主要用例是不同的屏幕尺寸需要不同的用户体验。这方面的经典示例是列表/详细信息界面。列表和详细信息窗格在较大的显示器上并排显示。但列表窗格在较小的显示器上全屏显示。单击列表项后,将详细信息窗格全屏显示。 阅读详情

一:侧滑菜单:Drawerlayout和ActionBar 一起使用的
二:侧滑菜单:SlidingPaneLayout
三:NavigationView 需要导入v4包
四:TabLayout

TabLayout和ViewPager联动的。


侧滑菜单都是在V4包下面的rawerLayout,v4没有xml文件,所有编辑器没有办法提示出来。

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
android:layout_gravity="left|start" 注意一定要写这句话,不然会重叠在一起:

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


可以写成start,因为在阿拉伯国家是从右往左的。
但是低版本的是没有办法的。
现在的兼容性的写法是left|start


<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout 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:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:id="@+id/drawer"
    android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">
<FrameLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#F00"
    >
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="hello"
        />


</FrameLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="left|start"
        android:orientation="horizontal"
        android:background="#0F0"
        android:id="@+id/menu"
        >
    </LinearLayout>
</android.support.v4.widget.DrawerLayout>






实现控制:


public class MainActivity extends AppCompatActivity implements View.OnClickListener {


    private DrawerLayout drawer;
    private LinearLayout menu;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        drawer = (DrawerLayout) findViewById(R.id.drawer);
        menu = (LinearLayout) findViewById(R.id.menu);
        menu.setOnClickListener(this);


    }


    @Override
    public void onClick(View v) {
        //drawer.closeDrawer(menu);
        //drawer.closeDrawer(Gravity.START);//4.0一下是不能使用START的
        drawer.closeDrawer(GravityCompat.START);//这样就可以了
    }
}


---------------------------------------------------------------




Drawerlayout和ActionBar 一起使用的






public class MainActivity extends AppCompatActivity implements View.OnClickListener {


    private DrawerLayout drawer;
    private LinearLayout menu;
    private ActionBarDrawerToggle toggle;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        drawer = (DrawerLayout) findViewById(R.id.drawer);
        menu = (LinearLayout) findViewById(R.id.menu);
        menu.setOnClickListener(this);
        //显示Home
toggle = new ActionBarDrawerToggle(this, drawer, 0, 0);
        //三条横线的Menu
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        toggle.syncState();
drawer.setDrawerListener(toggle);//让DrawerLayout的动作影响上面的按钮



    }




    /**
     * toggle点击后DrawerLayout 变化
     * @param item
     * @return
     */
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        if(toggle.onOptionsItemSelected(item)){
            return true;
        }
        return super.onOptionsItemSelected(item);
    }




    @Override
    public void onClick(View v) {
        //drawer.closeDrawer(menu);
        //drawer.closeDrawer(Gravity.START);//4.0一下是不能使用START的
        drawer.closeDrawer(GravityCompat.START);//这样就可以了
    }
}




----------------------------------------------------------------------
android.support.v4.widget.SlidingPaneLayout


调换上面例子的LinearLayout 和FrameLayout


Metr design中所有的空间都是有厚度的。
在5.0以上,所有的控件都有自己的高度,z轴,在Metr design 轴越高,可以覆盖z轴低的控件。



增加一个属性:android:elevation="5dp"


<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.SlidingPaneLayout 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:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    tools:context="com.kodulf.cehua.Cehua2SlidingPaneLayout">


    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="left|start"
        android:orientation="horizontal"
        android:background="#0F0"
        android:id="@+id/menu"
        >
    </LinearLayout>


    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#F00"
        android:elevation="5dp"

        >
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="hello"
            />
    </FrameLayout>
</android.support.v4.widget.SlidingPaneLayout>




-------------------------------------------------------------------


package com.kodulf.cehua;


import android.support.v4.widget.SlidingPaneLayout;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;


public class Cehua2SlidingPaneLayout extends AppCompatActivity implements View.OnClickListener, SlidingPaneLayout.PanelSlideListener {


    private View content;
    private SlidingPaneLayout sliding;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_cehua2_sliding_pane_layout);
        sliding = (SlidingPaneLayout) findViewById(R.id.sliding);
        content = findViewById(R.id.framelayout);
        sliding.setPanelSlideListener(this);
    }




    @Override
    public void onClick(View v) {


    }




    @Override
    public void onPanelSlide(View panel, float slideOffset) {
        //slideOffset全部打开是1,完全关闭时0


        //缩放的锚点,是左侧的中心点,默认的锚点坐标是在中心点上面,那么我们改变X就行了。
        content.setPivotX(0);



        //获取屏幕宽度的一半是不可以的
//        WindowManager manager = getWindowManager();
//        Display defaultDisplay = manager.getDefaultDisplay();
//        DisplayMetrics outMetrics = new DisplayMetrics();
//        defaultDisplay.getMetrics(outMetrics);
//        int heightPixels = outMetrics.heightPixels;
//        content.setPivotY(heightPixels / 2);
        //获取控件的宽度的一半就可以了
        int height = panel.getHeight();
        content.setPivotY(height / 2);


        content.setScaleX(1- slideOffset*0.5f);

        content.setScaleY(1 - slideOffset*0.5f);


    }


    @Override
    public void onPanelOpened(View panel) {


    }


    @Override
    public void onPanelClosed(View panel) {


    }
}


---------------------------------------------


//如果要兼容2.0的手机
        ViewCompat.setPivotX(content, 0);
        ViewCompat.setPivotX(content, height / 2);
        ViewCompat.setScaleX(content, 1 - slideOffset * 0.5f);
        ViewCompat.setScaleY(content, 1 - slideOffset * 0.5f);


------------------------------------------------------------------------------
API的最低版本,google 说了存世的是10.


----------------------------------------------
package com.kodulf.cehua;


import android.support.v4.view.ViewCompat;
import android.support.v4.widget.SlidingPaneLayout;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.BoringLayout;
import android.util.DisplayMetrics;
import android.view.Display;
import android.view.View;
import android.view.WindowManager;


public class Cehua2SlidingPaneLayout extends AppCompatActivity implements View.OnClickListener, SlidingPaneLayout.PanelSlideListener {


    private View content;
    private SlidingPaneLayout sliding;
    private View menu;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_cehua2_sliding_pane_layout);
        sliding = (SlidingPaneLayout) findViewById(R.id.sliding);
        content = findViewById(R.id.framelayout);
        sliding.setPanelSlideListener(this);


        menu = findViewById(R.id.menu);
    }




    @Override
    public void onClick(View v) {


    }


    @Override
    public void onPanelSlide(View panel, float slideOffset) {
        //slideOffset全部打开是1,完全关闭时0


        //缩放的锚点,是左侧的中心点,默认的锚点坐标是在中心点上面,那么我们改变X就行了。
        content.setPivotX(0);


        //获取屏幕宽度的一半是不可以的
//        WindowManager manager = getWindowManager();
//        Display defaultDisplay = manager.getDefaultDisplay();
//        DisplayMetrics outMetrics = new DisplayMetrics();
//        defaultDisplay.getMetrics(outMetrics);
//        int heightPixels = outMetrics.heightPixels;
//        content.setPivotY(heightPixels / 2);
        //获取控件的宽度的一半就可以了
        int height = panel.getHeight();
        content.setPivotY(height / 2);




        content.setScaleX(1 - slideOffset * 0.5f);
        content.setScaleY(1 - slideOffset * 0.5f);


        //如果要兼容2.0的手机
//        ViewCompat.setPivotX(content, 0);
//        ViewCompat.setPivotX(content, height / 2);
//        ViewCompat.setScaleX(content, 1 - slideOffset * 0.5f);
//        ViewCompat.setScaleY(content, 1 - slideOffset * 0.5f);


 //      ViewCompat.setTranslationX(menu,-menu.getWidth()/2*(1-slideOffset));
    }


    @Override
    public void onPanelOpened(View panel) {


    }


    @Override
    public void onPanelClosed(View panel) {


    }
}






-------------------------------------------------------------------------------------


NavigationView
要导入一个包。 F4,选中dependency 选择+  选中 design()


修改Main_activity 里面的LinearLayout 为 <android.support.design.widget.NavigationView


<android.support.design.widget.NavigationView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="left|start"
        android:id="@+id/menu"
        >
    </android.support.design.widget.NavigationView>


添加自定义属性:
 添加这行xmlns:app="http://schemas.android.com/apk/res-auto"
 
然后 Close Project,再打开。


新建一个menu 的目录
新建一个menu的文件。navigation_menu


  <?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:title="第一项" android:id="@+id/item_1"/>
<item android:title="第二项" android:id="@+id/item_2"/>
<item android:title="第三项" android:id="@+id/item_3"/>
<item android:title="第四项" android:id="@+id/item_4"/>
</menu>




添加 app:menu="@menu/navigation" 到下面


    <android.support.design.widget.NavigationView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="left|start"
        android:id="@+id/menu"
       
        app:menu="@menu/navigation"
        >
    </android.support.design.widget.NavigationView>


修改:MainAcitivty:
package com.kodulf.cehua;


import android.support.design.widget.NavigationView;
import android.support.v4.app.ActivityCompat;
import android.support.v4.view.GravityCompat;
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.view.View;
import android.widget.LinearLayout;
import android.widget.Toast;


public class MainActivity extends AppCompatActivity implements View.OnClickListener, NavigationView.OnNavigationItemSelectedListener {


    private DrawerLayout drawer;
    private NavigationView menu;
    private ActionBarDrawerToggle toggle;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        drawer = (DrawerLayout) findViewById(R.id.drawer);
        menu = (NavigationView) findViewById(R.id.main_menu);
//        menu = (LinearLayout) findViewById(R.id.menu);
//        menu.setOnClickListener(this);
//        显示Home
        toggle = new ActionBarDrawerToggle(this, drawer, 0, 0);
        //三条横线的Menu
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        toggle.syncState();
        drawer.setDrawerListener(toggle);//让DrawerLayout的动作影响上面的按钮
        menu.setNavigationItemSelectedListener(this);
    }


    /**
     * menu点击后DrawerLayout 变化
     * @param item
     * @return
     */
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        if(toggle.onOptionsItemSelected(item)){
            return true;
        }
        return super.onOptionsItemSelected(item);
    }


    @Override
    public void onClick(View v) {


    }


    @Override
    public boolean onNavigationItemSelected(MenuItem item) {
        //return false;
        switch (item.getItemId()){
            case R.id.item_1:
                Toast.makeText(this,"first",Toast.LENGTH_LONG).show();
                break;
            case R.id.item_4:
                ActivityCompat.finishAffinity(this);
                break;
        }
        drawer.closeDrawer(GravityCompat.START);
        return true;
    }
//
//    @Override
//    public void onClick(View v) {
//        //drawer.closeDrawer(menu);
//        //drawer.closeDrawer(Gravity.START);//4.0一下是不能使用START的
//        drawer.closeDrawer(GravityCompat.START);//这样就可以了
//    }


}












把上面四项作为单选项:


<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <group android:checkableBehavior="single">
        <item android:title="第一项" android:id="@+id/item_1"/>
        <item android:title="第二项" android:id="@+id/item_2"/>
        <item android:title="第三项" android:id="@+id/item_3"/>
        <item android:title="第四项" android:id="@+id/item_4"/>
        </group>
</menu>


默认选中
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <group android:checkableBehavior="single">
        <item android:title="第一项" android:id="@+id/item_1" android:checked="true"/>
        <item android:title="第二项" android:id="@+id/item_2"/>
        <item android:title="第三项" android:id="@+id/item_3"/>
        <item android:title="第四项" android:id="@+id/item_4"/>
        </group>
</menu>




添加图片
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <group android:checkableBehavior="single">
        <item android:title="第一项" android:id="@+id/item_1" android:icon="@mipmap/ic_launcher" android:checked="true" />
        <item android:title="第二项" android:id="@+id/item_2" android:icon="@mipmap/ic_launcher"/>
        <item android:title="第三项" android:id="@+id/item_3" android:icon="@mipmap/ic_launcher"/>
        <item android:title="第四项" android:id="@+id/item_4" android:icon="@mipmap/ic_launcher"/>
        </group>
</menu>




添加小分组:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <group android:checkableBehavior="single">
        <item android:title="第一项" android:id="@+id/item_1" android:icon="@mipmap/ic_launcher" android:checked="true" />
        <item android:title="第二项" android:id="@+id/item_2" android:icon="@mipmap/ic_launcher"/>
        <item android:title="第三项" android:id="@+id/item_3" android:icon="@mipmap/ic_launcher"/>
        <item android:title="第四项" android:id="@+id/item_4" android:icon="@mipmap/ic_launcher"/>
        </group>
    <item android:title="小分组">
        <menu>
            <item android:id="@+id/group_1" android:title="设置"></item>
            <item android:id="@+id/group_2" android:title="我的"></item>
            <item android:id="@+id/group_3" android:title="退出"></item>
        </menu>
    </item>
</menu>



将字体设置大一些:app:itemTextAppearance="?android:textAppearanceLarge"


<android.support.design.widget.NavigationView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="left|start"
        android:id="@+id/main_menu"


        app:menu="@menu/navigation"
        app:itemTextAppearance="?android:textAppearanceLarge"
        >


---------------------------------------------------------
新建一个layout menu_header


高度设置一个定值:




<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="200dp"
    android:gravity="center"
    android:background="#600F">
<ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@mipmap/ic_launcher"/>
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="用户名"
        />
</LinearLayout>




然后添加app:headerLayout="@layout/menu_header"
<android.support.design.widget.NavigationView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="left|start"
        android:id="@+id/main_menu"
        app:headerLayout="@layout/menu_header"
        app:menu="@menu/navigation"
        app:itemTextAppearance="?android:textAppearanceLarge"
        >








+++++++++++++++++++++++++++++++++++++++++++++
ViewPager


<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:id="@+id/drawer"
    android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">
<!--FrameLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#F00"
    >
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="hello"
        />


</FrameLayout-->


    <LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#F00"
        android:orientation="vertical"
    >
    <android.support.v4.view.ViewPager
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/pager"
        />


</LinearLayout>
    <android.support.design.widget.NavigationView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="left|start"
        android:id="@+id/main_menu"
        app:headerLayout="@layout/menu_header"
        app:menu="@menu/navigation"
        app:itemTextAppearance="?android:textAppearanceLarge"
        >
    </android.support.design.widget.NavigationView>
</android.support.v4.widget.DrawerLayout>


----------------------------------------------------------------
一种新的ViewPager和Fragment结合的写法:
1:Fragment
2:Adapter



---------------
Fragment:


/**
 * A simple {@link Fragment} subclass.
 */
public class BlankFragment2 extends Fragment {


    public BlankFragment2() {
        // Required empty public constructor
    }


    public static BlankFragment2 newInstance(String text){
        Bundle args = new Bundle();
        BlankFragment2 blankFragment2 = new BlankFragment2();
        args.putString("text", text);
        blankFragment2.setArguments(args);
        Log.d("151228MY", "BlankFragment postion" + text);
        return  blankFragment2;
    }



    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_blank_fragment2, container, false);


    }


    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        TextView text =(TextView)view.findViewById(R.id.fragment2_textView);
        String s = getArguments().getString("text");
        text.setText("HELLO"+s);
    }
}


---------------
Fragment Layout:
<FrameLayout 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" tools:context="com.kodulf.cehua.fragments.BlankFragment2"
    >


    <!-- TODO: Update blank fragment layout -->
    <TextView
        android:id="@+id/fragment2_textView"
        android:layout_width="match_parent" android:layout_height="match_parent"
        android:text="@string/hello_blank_fragment"
        android:textSize="50dp"
        android:textColor="#00F"/>


</FrameLayout>
-----------------
Adapter:
package com.kodulf.cehua;


import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.util.Log;


import com.kodulf.cehua.fragments.BlankFragment2;


import java.util.List;


/**
 * Created by Administrator on 15-12-28.
 */
public class MyAdapter extends FragmentPagerAdapter {


    private List<String> list;


    public MyAdapter(FragmentManager fm, List<String> list) {
        super(fm);
        this.list=list;
    }


    @Override
    public Fragment getItem(int position) {
        Log.d("151228MY", "postion" + position);
        return BlankFragment2.newInstance(list.get(position));
        //return null;
    }


    @Override
    public int getCount() {
//        return 0;
        return list.size();
    }


    @Override
    public CharSequence getPageTitle(int position) {
        //return super.getPageTitle(position);
        return list.get(position);
    }
}


-------------------
Main_acvitity(该代码已经实现了tab 和Viewpage的互动了)


public class MainActivity extends AppCompatActivity implements View.OnClickListener, NavigationView.OnNavigationItemSelectedListener {
//public class MainActivity extends AppCompatActivity {


    private DrawerLayout drawer;
    private NavigationView menu;
    private ActionBarDrawerToggle toggle;
    private ViewPager viewPager;
    private TabLayout tab;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        drawer = (DrawerLayout) findViewById(R.id.drawer);
        menu = (NavigationView) findViewById(R.id.main_menu);
//        menu = (LinearLayout) findViewById(R.id.menu);
//        menu.setOnClickListener(this);
//        显示Home
        toggle = new ActionBarDrawerToggle(this, drawer, 0, 0);
        //三条横线的Menu
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        toggle.syncState();
        drawer.setDrawerListener(toggle);//让DrawerLayout的动作影响上面的按钮
        menu.setNavigationItemSelectedListener(this);
        viewPager = (ViewPager) findViewById(R.id.pager);
        List<String> list = new ArrayList<String>();
        for (int i = 0; i < 50; i++) {
           list.add(String.valueOf(i));
        }
        viewPager.setAdapter(new MyAdapter(getSupportFragmentManager(),list));
        tab = (TabLayout)findViewById(R.id.tablayout);
        tab.setupWithViewPager(viewPager);
    }


    /**
     * menu点击后DrawerLayout 变化
     * @param item
     * @return
     */
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        if(toggle.onOptionsItemSelected(item)){
            return true;
        }
        return super.onOptionsItemSelected(item);
    }


    @Override
    public void onClick(View v) {


    }


    @Override
    public boolean onNavigationItemSelected(MenuItem item) {
        //return false;
        switch (item.getItemId()){
            case R.id.item_1:
                Toast.makeText(this,"first",Toast.LENGTH_LONG).show();
                break;
            case R.id.item_4:
                ActivityCompat.finishAffinity(this);
                break;
        }
        drawer.closeDrawer(GravityCompat.START);
        return true;
    }


//    @Override
//    public void onClick(View v) {
//        //drawer.closeDrawer(menu);
//        //drawer.closeDrawer(Gravity.START);//4.0一下是不能使用START的
//        drawer.closeDrawer(GravityCompat.START);//这样就可以了
//    }


}


-----------------
activity_main


<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:id="@+id/drawer"
    android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">
<!--FrameLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#F00"
    >
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="hello"
        />


</FrameLayout-->


    <LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#F00"
        android:orientation="vertical"
    >
        <android.support.design.widget.TabLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/tablayout"
            app:tabTextColor="#000"
            app:tabSelectedTextColor="#f00"
            app:tabMode="scrollable"
            app:tabIndicatorColor="#00E">


        </android.support.design.widget.TabLayout>
    <android.support.v4.view.ViewPager
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#FF0"
        android:id="@+id/pager"
        />


</LinearLayout>
    <android.support.design.widget.NavigationView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="left|start"
        android:id="@+id/main_menu"
        app:headerLayout="@layout/menu_header"
        app:menu="@menu/navigation"
        app:itemTextAppearance="?android:textAppearanceLarge"
        >
    </android.support.design.widget.NavigationView>
</android.support.v4.widget.DrawerLayout>






----------------------------------------------------------------
TabLayout


        <android.support.design.widget.TabLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/tablayout"
            app:tabTextColor="#000"
            app:tabSelectedTextColor="#f00"
            app:tabMode="scrollable"
            app:tabIndicatorColor="#00E">


        </android.support.design.widget.TabLayout>
    <android.support.v4.view.ViewPager
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#FF0"
        android:id="@+id/pager"
        />




Main
        tab = (TabLayout)findViewById(R.id.tablayout);
        tab.setupWithViewPager(viewPager);


Adapter里面:
    @Override
    public CharSequence getPageTitle(int position) {
        //return super.getPageTitle(position);
        return list.get(position);
    }


Android滑动菜单的简单实现(SlidingPaneLayout) SlidingPaneLayout是Android团队在2013年Google IO大会上更新的Support V4库里面的高级系统控件,它可以轻松的实现一些简单的滑动菜单效果,例如QQ5.0上的菜单滑动效果,这篇博文来讲讲SlidingPaneLayout如何简单使用。先看一下效果图 SlidingPaneLayout本质是一个水平的多层布局控件,下面简单介绍下使用方法。1:在MainActi 阅读详情

相关推荐

SlidingPanelLayout与ViewPager的滑动冲突

SlidingPanelLayout,ViewPager,滑动冲突

ViewPager和SlidingPaneLayout的滑动冲突事件

我们在做需要带有侧滑栏的框架时难免遇到ViewPager与Fragment的联用,这时我们在页面右划时没有问题,但是当页面需要左划时,就会触发左侧隐藏的SlidingPaneLayout侧滑栏,所以我们下面自定义控件来继承SlidingPaneLayout,写上对应的处理方法来解决冲突事件的发生。 代码如下: package com.example.dotawang.puding.cu

Dota_wy的博客 1534

Android引导页面的滑动实现,解决ViewPage侧滑与ListView滑动的冲突问题

功能,实现完美侧滑,解决ViewPage侧滑与ListView滑动的冲突问题

NavigationView+Drawerlayout+Toolbar实现侧滑菜单

MaterialDesign使用 (二) Navigation的使用使用Navigation+Drawerlayout+Toolbar实现简单侧滑菜单2016/9/8 星期四 19:59:10 先看效果图:使用Tablayout,首先需要在项目中加入Design包dependencies { compile 'com.android.support:design:24.1.1' }因为要用

飞渡浮舟 6487

SlidingPaneLayoutNavigationDemo:安卓应用演示

SlidingPaneLayoutNavigationDemo Android App Demos - 1 Android 应用常见侧边栏模式示例。 欢迎与我交流Android开发的一切知识,

SlidingPaneLayout

向右滑动,显示颜色选择的菜单,点击之后回到主界面,主界面显示相应的颜色。一开始默认的颜色是黑色。侧滑显示...

ActionBar与DrawerLayout侧滑菜单的使用

DrawerLayout是很简单的一个显示侧滑菜单的系统控件,结合ActionBar使用会更加完美. 首先,需要在清单文件引入的主题android:theme="@style/AppTheme"的各个属性: name="AppTheme" parent="Theme.AppCompat.Light"> name="colorPrimary">@color/co

番茄你个马铃薯的博客 480

ActionBar+侧滑第三方框架

ActionBar+侧滑第三方框架,实现了视图的左右滑动。

ToolBar 侧滑箭头修改 导航菜单 三条横线 的方法

getSupportActionBar().setHomeAsUpIndicator(new DrawerArrowDrawable(getApplicationContext())); ToolBar 默认的返回键是这样的箭头,要想修改的话可以使用ToolBar.setNavigationIcon(id 或 Drawable) 方法来修改,不过是无法达到我想要的三条横线的要求。   所以

q871761987的博客 5033

Revit二次开发——不启动Revit,做rvt文件数据导出

Revit二次开发——不启动Revit,做rvt文件数据导出Node.js部分调用C#端供外部调用的dllC#部分调用RevitNet.dll,做数据导出exe做外部调用dll总结功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 N

Y.Jerome的专栏 4110

从零构建智慧农业监测终端:STM32数据采集与LoRa组网实战

本文详细介绍了如何从零构建智慧农业监测终端,涵盖STM32数据采集与LoRa组网实战。通过DHT22温湿度传感器和YL-69土壤湿度传感器实现精准环境监测,结合LoRa无线传输技术解决偏远农田信号问题。文章还分享了硬件选型、电路设计、低功耗优化及Flutter跨平台应用开发等关键技巧,助力农业智能化升级。

weixin_29172963的博客 357

SlidingPaneLayout,DrawerLayout,ActionBar,NavigationView 详解 <二>SlidingPaneLayout 的 简单的使用

Metr design中所有的空间都是有厚度的。 在5.0以上,所有的控件都有自己的高度,就是z轴,在Metr design z轴越高,可以覆盖z轴低的控件。 在SlidingPaneLayout 的子控件里面增加一个属性:android:elevation="5dp",该控件就会高于其他的控件了。 注:elevation就是高度和海拔的意思,还有高尚,立视图,正视图的意思 0:布局

Kodulf的专栏 1385

RSA算法详解:万字文章详解RSA的加密与解密

为了彻彻底底的研究明白RSA算法,真的是。。煞(lei)费(si)苦(wo)心(le),首先我希望自己前前后后、彻彻底底的琢磨明白,其次我也希望我把他分享出来以后,大家都能读得懂,这篇文章真的是我迄今为止写的又臭又长的一篇文章了,但是我能保证的是,你读完了以后,绝对不会再问RSA是啥玩意儿了。。

布啦啦 7668

简单介绍抽屉效果

官方文档 这种抽屉般的ui,有点像是侧边栏,不过跟侧边栏还是有点不同的,它是在显示在actionbar的下面的,而侧边栏显然是用另外一个视图来遮盖当前的视图。当然,因为是13 google才更新的support库支持的组件,你需要把最低版本写到高点的版本,不能写成2.x的版本。 官方demo给的是滑动左边侧滑的ui效果,下面是右边出来的效果。 1.活动视图: public clas

月清空的博客 3671

使用 Simulink 实现基于相控阵雷达的波束形成技术

摘要:本文详细介绍了利用MATLAB Simulink和Phased Array System工具箱实现相控阵雷达波束形成的完整流程。主要内容包括:1)创建Simulink模型;2)设计天线阵列参数;3)信号生成模块配置;4)波束形成算法实现;5)结果可视化方法;6)仿真调试与优化;7)代码导出与部署。通过分步指导,读者可以掌握从理论到实践的完整开发流程,包括关键参数设置和算法实现示例。该方案适用于军事、气象等领域的雷达系统开发,并支持后续嵌入式和智能算法集成。

xiaoheshang_123的博客 179

PHP与Node.js的对比及优缺点分析

PHP和Node.js是两种常用的服务器端编程语言,它们在不同的应用场景下各有优势和劣势。本文将全方位比较PHP和Node.js的特点,以及它们在编程中的优缺点,并提供相应的源代码示例供参考。需要注意的是,本文只是对PHP和Node.js的一些优缺点进行了简要介绍,实际应用中还需要考虑其他因素,如团队经验、项目规模和预算等。最终的选择应该基于全面的评估和需求分析。PHP:PHP是一种同步阻塞的编程语言,它的处理方式是一次只处理一个请求。Node.js:Node.js的性能较高,特别适合处理高并发的请求。

ByteSparkX的博客 887

ViewPager和SlidingPaneLayout的滑动事件冲突

问题描述: ViewPager和SlidingPaneLayout的滑动事件冲突。 问题分析:          在手指左右滑动时,SlidingPaneLayout会屏蔽ViewPager的滑动事件。 解决办法: 自定义SlidingPaneLayout类 import android.content.Context; import android.support.v4.view.M

Honiler的博客 858

130页5万字某市档案馆数字档案馆建设方案

【版权声明】本资料来源网络,仅用于行业知识分享,供个人学习参考,请勿商用。【侵删致歉】如有侵权请联系小编,将在收到信息后第一时间进行删除!完整资料领取见文末,部分资料内容:国家档案局证实颁布《数字档案馆建设指南》, 明确了数字档案馆建设原则、要求、目标,对相关系统建设内容、功能要求进行了概括和详细说明。数字档案馆系统建设应以 OAIS&nbsp;参考模型为设计基础,以实现数字资源的长期保存与可信管理。设计的数字档案馆系统架构如下图。图-1 数字档案馆体系结构数字档案馆建设包括五大层次和三大保障体系:

zuoan1993的博客 1180

NavigationView的学习

------------------------------------------------------------------------------------- NavigationView 要导入一个包。 F4,选中dependency 选择+  选中 design() 修改Main_activity 里面的LinearLayout 为      

Kodulf的专栏 743

数据分享|2000-2021年全国各城市风速数据(逐日、逐月、逐年)

而后,将每日的csv文件进行展点,再投影,采用反距离权重法对每日的数据进行插值。:美国国家海洋和大气管理局(NOAA)下设的国家环境信息中心(NCEI),网址为:https://www.ncei.noaa.gov/data/global-summary-of-the-day/archive/该数据是通过风速平均值插值得来,由于插值的方式与各种处理参数的不同,会导致该数据与其它风速数据不同,数据仅供个人学习使用哦。如果在论文中使用该数据,数据来源请写上面的原始数据来源,处理方法请写上面的处理方式!

J_Giser的博客 1777

sap中途启用物料账

spro->控制->产品成本控制->实际成本核算/物料分类帐->实际成本核算->激活实际成本的在产品。spro->控制->产品成本控制->实际成本核算/物料分类帐->实际成本核算->激活实际成本组件划分。spro->控制->产品成本控制->实际成本核算/物料分类帐->实际成本核算->激活实际成本核算。spro->控制->产品成本控制->实际成本核算/物料分类帐->激活评估范围的物料分类账。2.对于之前存在物料移动,但是期初没有库存的物料,物料分类账里追踪不到相关物料信息。1.需要激活物料分类账。

Yeol827的博客 992

DrawerLayout和NavigationView轻松实现抽屉侧滑

在android5.0后谷歌添加了DrawerLayout和NavigationView两个控件,使用这两个控件可以很轻松的实现抽屉侧滑效果,这里说先DrawerLayout;DrawerLayout: DrawerLayout是MateriaDesign风格中的控件,来自support-v4包里面,相当于一个自定义容器 extends ViewGroup ,可以看作是一个有侧滑效果的帧布局。1、

wangwo1991的博客 1394

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

解决viewpager嵌套滑动冲突,并保留侧滑菜单功能

重写子pagerview的dispatchTouchEvent方法,在返回前添加一句getParent().requestDisallowInterceptTouchEvent(true)中断掉事件的传递,类如下public class SupperViewPager extends ViewPager { private int screenWidth;//屏幕宽度 public S

只影的博客 1126

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Navigation Drawer介绍

在2013 google IO当天,Android团的更新了Support库,新版本(V13)的Support库中新加入了几个比较重要的功能。 添加DrawerLayout控件,支持创建 Navigation Drawer模式。可以设置从左边划出菜单或者右边,也可以左右菜单同时存在。 添加SlidingPaneLayout控件来支持各种屏幕上的摘要、详情界面模式。比如 Gma...

weixin_30954265的博客 253

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

gravity中的start和end

在AndroidStudio中,在布局中写下gravity=“left|bottom”时,会提示将left替换为start。why?它们的不同点是啥? 文档上是这么说的: left 0x03 Push object to the left of its container, not changing its size. start 0x00800003 Push objec...

callmeL的博客 1235
上一篇: android 中的事件分发和事件拦截
下一篇: Android studio 上面设置git 连接github
千雅爸爸
博客等级 码龄18年 292粉丝 639原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值