Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 操作栏顶部的抽屉布局?_Android_Navigation Drawer - Fatal编程技术网

Android 操作栏顶部的抽屉布局?

Android 操作栏顶部的抽屉布局?,android,navigation-drawer,Android,Navigation Drawer,我已经创建了导航抽屉,正如谷歌解释的那样 我怎样才能让它像谷歌play商店或gmail android应用一样重叠在动作栏上 你知道吗 protected void onCreate(Bundle savedInstanceState) { this.requestWindowFeature(Window.FEATURE_NO_TITLE); super.onCreate(savedInstanceState); setContentView(R.layout.act

我已经创建了导航抽屉,正如谷歌解释的那样

我怎样才能让它像谷歌play商店或gmail android应用一样重叠在动作栏上

你知道吗

protected void onCreate(Bundle savedInstanceState) {
    this.requestWindowFeature(Window.FEATURE_NO_TITLE);
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    getSupportActionBar().setHomeButtonEnabled(true);
    mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
    mDrawerList = (ListView) findViewById(R.id.left_drawer);

    // Set the adapter for the list view
    mDrawerList.setAdapter(new ArrayAdapter<String>(this,
            R.layout.list_item1, mPlanetTitles));
    // Set the list's click listener
    mDrawerList.setOnItemClickListener(new DrawerItemClickListener());
    mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
            R.string.action_settings, R.string.action_settings) {

        /** Called when a drawer has settled in a completely closed state. */
        public void onDrawerClosed(View view) {
            super.onDrawerClosed(view);
            getSupportActionBar().setTitle("OPEN");
            invalidateOptionsMenu(); // creates call to
                                        // onPrepareOptionsMenu()
        }

        /** Called when a drawer has settled in a completely open state. */
        public void onDrawerOpened(View drawerView) {
            super.onDrawerOpened(drawerView);
            getSupportActionBar().setTitle("CLOSE");
            invalidateOptionsMenu(); // creates call to
                                        // onPrepareOptionsMenu()
        }
    };

    // Set the drawer toggle as the DrawerListener
    mDrawerLayout.setDrawerListener(mDrawerToggle);
}
创建时受保护的void(Bundle savedInstanceState){
this.requestWindowFeature(Window.FEATURE\u NO\u TITLE);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeButtonEnabled(true);
mDrawerLayout=(抽屉布局)findViewById(R.id.抽屉布局);
mDrawerList=(ListView)findViewById(R.id.left\u抽屉);
//设置列表视图的适配器
mDrawerList.setAdapter(新阵列适配器,
R.layout.list_item1,mPlanetTitles);
//设置列表的单击侦听器
setOnItemClickListener(新的DrawerItemClickListener());
mDrawerToggle=新操作BarDrawerToggle(此,mDrawerLayout,
R.string.action\u设置,R.string.action\u设置){
/**当抽屉处于完全关闭状态时调用*/
公共无效onDrawerClosed(视图){
super.onDrawerClosed(视图);
getSupportActionBar().setTitle(“打开”);
InvalidateOptions菜单();//创建对的调用
//onPrepareOptions菜单()
}
/**当抽屉处于完全打开状态时调用*/
打开图纸上的公共空白(视图抽屉视图){
super.onDrawerOpened(抽屉视图);
getSupportActionBar().setTitle(“关闭”);
InvalidateOptions菜单();//创建对的调用
//onPrepareOptions菜单()
}
};
//将抽屉开关设置为抽屉定位器
mDrawerLayout.setDrawerListener(mDrawerToggle);
}
活动XML

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.drawermenu.MainActivity" >

<FrameLayout
    android:id="@+id/content_frame"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin" >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/hello_world" />
    </RelativeLayout>
</FrameLayout>

<LinearLayout
    android:layout_width="240dp"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    android:background="#111"
    android:orientation="vertical" >

    <ListView
        android:id="@+id/left_drawer"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:choiceMode="singleChoice"
        android:divider="@android:color/transparent"
        android:dividerHeight="0dp" />

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:src="@drawable/ic_launcher" />
</LinearLayout>

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

您可以使用工具栏而不是通常的操作栏,工具栏与布局中的任何视图一样,如下所示:

<android.support.v7.widget.Toolbar
    android:id=”@+id/my_toolbar”
    android:layout_height=”wrap_content”
    android:layout_width=”match_parent” />


然后,如果您愿意,您可以将其设置为您的操作栏,或者直接处理它

问题已经回答。但我仍然想为其他面临困难的用户发布完整的答案

以下是最终解决方案的屏幕截图

  • Java类

     public class MainActivity extends ActionBarActivity {
     private String[] mPlanetTitles = { "a", "b", "c", "d" };
        private DrawerLayout mDrawerLayout;
        private ListView mDrawerList;
        private ActionBarDrawerToggle mDrawerToggle;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    getSupportActionBar().setHomeButtonEnabled(true);
    mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
    mDrawerList = (ListView) findViewById(R.id.left_drawer);
    
    // Set the adapter for the list view
    mDrawerList.setAdapter(new ArrayAdapter<String>(this,
            R.layout.list_item1, mPlanetTitles));
    // Set the list's click listener
    mDrawerList.setOnItemClickListener(new DrawerItemClickListener());
    mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
            R.string.action_settings, R.string.action_settings) {
    
        /** Called when a drawer has settled in a completely closed state. */
        public void onDrawerClosed(View view) {
            super.onDrawerClosed(view);
            getSupportActionBar().setTitle("OPEN");
            invalidateOptionsMenu(); // creates call to
                                        // onPrepareOptionsMenu()
        }
    
        /** Called when a drawer has settled in a completely open state. */
        public void onDrawerOpened(View drawerView) {
            super.onDrawerOpened(drawerView);
            getSupportActionBar().setTitle("CLOSE");
            invalidateOptionsMenu(); // creates call to
                                        // onPrepareOptionsMenu()
        }
    };
    
    // Set the drawer toggle as the DrawerListener
    mDrawerLayout.setDrawerListener(mDrawerToggle);
    }
    
    private class DrawerItemClickListener implements
        ListView.OnItemClickListener {
    @Override
    public void onItemClick(AdapterView parent, View view, int position,
            long id) {
    
        TextView t = (TextView) view.findViewById(R.id.tvExtra);
        Log.e("text", t.getText().toString());
        startActivity(new Intent(MainActivity.this,
                JavaDrawerActivity.class));
    }
    }
    
    @Override
    public boolean onPrepareOptionsMenu(Menu menu) {
    // If the nav drawer is open, hide action items related to the content
    // view
    // boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList);
    // menu.findItem(R.id.action_websearch).setVisible(!drawerOpen);
    return super.onPrepareOptionsMenu(menu);
    }
    
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
    }
    
     @Override
     public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();
    if (id == R.id.action_settings) {
        return true;
    }
    if (mDrawerToggle.onOptionsItemSelected(item)) {
        return true;
    }
    return super.onOptionsItemSelected(item);
    }
    
    @Override
    protected void onPostCreate(Bundle savedInstanceState) {
    super.onPostCreate(savedInstanceState);
    // Sync the toggle state after onRestoreInstanceState has occurred.
    mDrawerToggle.syncState();
    }
    
    @Override
    public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    mDrawerToggle.onConfigurationChanged(newConfig);
    }
    
    }
    
    公共类MainActivity扩展了ActionBarActivity{
    私有字符串[]mPlanetTitles={“a”、“b”、“c”、“d”};
    私人抽屉布局mDrawerLayout;
    私有列表视图mDrawerList;
    私有操作bardrawertoggle mDrawerToggle;
    @凌驾
    创建时受保护的void(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Toolbar Toolbar=(Toolbar)findViewById(R.id.Toolbar);
    设置支持操作栏(工具栏);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    getSupportActionBar().setHomeButtonEnabled(true);
    mDrawerLayout=(抽屉布局)findViewById(R.id.抽屉布局);
    mDrawerList=(ListView)findViewById(R.id.left\u抽屉);
    //设置列表视图的适配器
    mDrawerList.setAdapter(新阵列适配器,
    R.layout.list_item1,mPlanetTitles);
    //设置列表的单击侦听器
    setOnItemClickListener(新的DrawerItemClickListener());
    mDrawerToggle=新操作BarDrawerToggle(此,mDrawerLayout,
    R.string.action\u设置,R.string.action\u设置){
    /**当抽屉处于完全关闭状态时调用*/
    公共无效onDrawerClosed(视图){
    super.onDrawerClosed(视图);
    getSupportActionBar().setTitle(“打开”);
    InvalidateOptions菜单();//创建对的调用
    //onPrepareOptions菜单()
    }
    /**当抽屉处于完全打开状态时调用*/
    打开图纸上的公共空白(视图抽屉视图){
    super.onDrawerOpened(抽屉视图);
    getSupportActionBar().setTitle(“关闭”);
    InvalidateOptions菜单();//创建对的调用
    //onPrepareOptions菜单()
    }
    };
    //将抽屉开关设置为抽屉定位器
    mDrawerLayout.setDrawerListener(mDrawerToggle);
    }
    私有类DrawerItemClickListener实现
    ListView.com侦听器{
    @凌驾
    public void onItemClick(AdapterView父视图、视图、整型位置、,
    长id){
    TextView t=(TextView)view.findViewById(R.id.tvExtra);
    Log.e(“text”,t.getText().toString());
    startActivity(新意图)(MainActivity.this、,
    JavaDrawerActivity.class);
    }
    }
    @凌驾
    公共布尔值OnPrepareOptions菜单(菜单){
    //如果导航抽屉打开,则隐藏与内容相关的操作项
    //看法
    //boolean-DrawerLayout=mDrawerLayout.isDrawerOpen(mDrawerList);
    //menu.findItem(R.id.action_websearch).setVisible(!drawerropen);
    返回super.onPrepareOptions菜单(菜单);
    }
    @凌驾
    公共布尔onCreateOptions菜单(菜单){
    //为菜单充气;这会将项目添加到操作栏(如果存在)。
    getMenuInflater().充气(R.menu.main,menu);
    返回true;
    }
    @凌驾
    公共布尔值onOptionsItemSelected(菜单项项){
    //处理操作栏项目单击此处。操作栏将
    //自动处理Home/Up按钮上的点击,只要
    //在AndroidManifest.xml中指定父活动时。
    int id=item.getItemId();
    if(id==R.id.action\u设置){
    返回true;
    }
    如果(MDRAWERTOGLE.onOptionsItemSelected(项目)){
    返回true;
    }
    返回super.onOptionsItemSelected(项目);
    }
    @凌驾
    后期创建时受保护的空(捆绑包savedInstanceState){
    super.onPostCreate(savedInstanceState);
    //在onRestoreInstanceState发生后同步切换状态。
    mDrawerToggle.syncState();
    }
    @凌驾
    公共无效OnConfiguration已更改(配置newConfig){
    super.onConfigurationChanged(newConfig);
    mDrawerToggle.onConfigurationChanged(newConfig);
    }
    }
    
  • XML

      <android.support.v4.widget.DrawerLayout        xmlns:android="http://schemas.android.com/apk/res/android"
       xmlns:tools="http://schemas.android.com/tools"
       android:id="@+id/drawer_layout"
       android:layout_width="match_parent"
       android:layout_height="match_parent"
       tools:context="com.example.drawermenu.MainActivity" >
    
      <FrameLayout
       android:id="@+id/content_frame"
       android:layout_width="match_parent"
        android:background="#FFFFFF"
       android:layout_height="match_parent" >
    
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
    
        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="#2196F3"
            android:minHeight="?attr/actionBarSize" >
        </android.support.v7.widget.Toolbar>
    
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="#000000"
            android:layout_below="@+id/toolbar"
            android:text="@string/hello_world" />
    </RelativeLayout>
    </FrameLayout>
    
        <LinearLayout
         android:layout_width="240dp"
         android:layout_height="match_parent"
         android:layout_gravity="start"
         android:background="#111"
         android:orientation="vertical" >
    
    <ListView
        android:id="@+id/left_drawer"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:choiceMode="singleChoice"
        android:divider="@android:color/transparent"
        android:dividerHeight="0dp" />
    
    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:src="@drawable/ic_launcher" />
       </LinearLayout>
    
    </android.support.v4.widget.DrawerLayout>
    
    
    
  • 设圈套
     <style name="AppTheme" parent="Theme.AppCompat">
    <item name="android:windowNoTitle">true</item>
    <item name="windowActionBar">false</item>
    </style>
    
      <activity
        android:name=".MainActivity"
        android:theme="@style/AppTheme" >
    
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
    
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>