导航抽屉无法在 Android 中运行我的代码?
Navigation Drawer not working my Code in Android?
我在 Android.I 中使用导航抽屉,有一些代码 examples.In 我的代码可以更改抽屉打开和抽屉关闭标题,但面板不是 open.I 未插入列表视图数组。我的主要问题是没有打开 panel.Is 我在代码中遗漏的任何内容?
layout_mynavigation.xml
<?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="match_parent">
<android.support.v7.widget.Toolbar
android:layout_height="150dp"
android:layout_width="match_parent"
android:id="@+id/toolbar"
android:background="?attr/colorPrimary"
android:minHeight="?android:attr/actionBarSize"/>
<android.support.v4.widget.DrawerLayout
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<ListView
android:id="@+id/drawer_list"
android:layout_width="240dp"
android:layout_height="wrap_content"
android:background="#000000"
android:layout_gravity="start"/>
</android.support.v4.widget.DrawerLayout>
MyNavigation.java
import android.content.res.Configuration;
import android.os.Bundle;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.MenuItem;
import android.view.View;
public class MyDrawer extends AppCompatActivity {
private ActionBarDrawerToggle mActionBarDrawerToggle;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_mydrawer);
Toolbar toolbar = (Toolbar)findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
if (getSupportActionBar() != null) {
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeButtonEnabled(true);
}
DrawerLayout mDrawerLayout = (DrawerLayout)findViewById(R.id.drawer_layout);
mActionBarDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,R.string.drawer_open,R.string.drawer_closed) {
@Override
public void onDrawerOpened(View drawerView) {
super.onDrawerOpened(drawerView);
if (getSupportActionBar() != null) {
getSupportActionBar().setTitle( R.string.drawer_open );
invalidateOptionsMenu();
}
}
@Override
public void onDrawerClosed(View drawerView) {
super.onDrawerClosed(drawerView);
if (getSupportActionBar() != null) {
getSupportActionBar().setTitle( R.string.drawer_closed );
invalidateOptionsMenu();
}
}
};
mDrawerLayout.setDrawerListener(mActionBarDrawerToggle);
}
@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
mActionBarDrawerToggle.syncState();
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
mActionBarDrawerToggle.onConfigurationChanged( newConfig );
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
return mActionBarDrawerToggle.onOptionsItemSelected(item) || super.onOptionsItemSelected(item);
}
}
styles.xml
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="windowActionBar">false</item>
<item name="android:windowNoTitle">true</item>
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<!-- Customize your theme here. -->
</style>
DrawerLayout
期望它的第一个子元素是实际布局,第二个子元素是抽屉。因此,要使其正常工作,您应该将布局更改为(假设您的整个抽屉仅包含一个 ListView
):
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.Toolbar
android:layout_height="150dp"
android:layout_width="match_parent"
android:id="@+id/toolbar"
android:background="?attr/colorPrimary"
android:minHeight="?android:attr/actionBarSize"/>
</LinearLayout>
<ListView
android:id="@+id/drawer_list"
android:layout_width="240dp"
android:layout_height="match_parent"
android:background="#000000"
android:layout_gravity="start"/>
</android.support.v4.widget.DrawerLayout>
您的 xml 布局似乎需要重新安排。 DrawerLayout
应该包含两个项目; 1) View
或 ViewGroup
设置为页面内容(例如,RelativeLayout
包含 Toolbar
和 Fragment
容器); 2) 一个 View
或 ViewGroup
,其中包含您的 NavigationDrawer
项(例如,ListView
)。
<android.support.v4.widget.DrawerLayout
android:id="@+id/navigation_drawer_layout"
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">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.Toolbar
android:id="@+id/your_toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:background="@color/your_toolbar_color"
android:minHeight="?attr/actionBarSize"/>
<FrameLayout
android:id="@+id/fragment_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/your_toolbar"/>
</RelativeLayout>
<ListView
android:id="@+id/your_drawer_list"
android:layout_width="@dimen/drawer_width"
android:layout_height="match_parent"
android:layout_gravity="left"
android:background="@color/your_drawer_color"
android:divider="@null"/>
</android.support.v4.widget.DrawerLayout>
您可以在此处获得更详细的解释和示例:
https://developer.android.com/training/implementing-navigation/nav-drawer.html
如果您的列表为空并且您的高度为 wrap_content
,则高度将为 0。将其更改为 match_parent
将使其填满屏幕,而不管内容如何。
<ListView
android:id="@+id/drawer_list"
android:layout_width="240dp"
android:layout_height="match_parent"
android:background="#000000"
android:layout_gravity="start"/>
我在 Android.I 中使用导航抽屉,有一些代码 examples.In 我的代码可以更改抽屉打开和抽屉关闭标题,但面板不是 open.I 未插入列表视图数组。我的主要问题是没有打开 panel.Is 我在代码中遗漏的任何内容?
layout_mynavigation.xml
<?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="match_parent">
<android.support.v7.widget.Toolbar
android:layout_height="150dp"
android:layout_width="match_parent"
android:id="@+id/toolbar"
android:background="?attr/colorPrimary"
android:minHeight="?android:attr/actionBarSize"/>
<android.support.v4.widget.DrawerLayout
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<ListView
android:id="@+id/drawer_list"
android:layout_width="240dp"
android:layout_height="wrap_content"
android:background="#000000"
android:layout_gravity="start"/>
</android.support.v4.widget.DrawerLayout>
MyNavigation.java
import android.content.res.Configuration;
import android.os.Bundle;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.MenuItem;
import android.view.View;
public class MyDrawer extends AppCompatActivity {
private ActionBarDrawerToggle mActionBarDrawerToggle;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_mydrawer);
Toolbar toolbar = (Toolbar)findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
if (getSupportActionBar() != null) {
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeButtonEnabled(true);
}
DrawerLayout mDrawerLayout = (DrawerLayout)findViewById(R.id.drawer_layout);
mActionBarDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,R.string.drawer_open,R.string.drawer_closed) {
@Override
public void onDrawerOpened(View drawerView) {
super.onDrawerOpened(drawerView);
if (getSupportActionBar() != null) {
getSupportActionBar().setTitle( R.string.drawer_open );
invalidateOptionsMenu();
}
}
@Override
public void onDrawerClosed(View drawerView) {
super.onDrawerClosed(drawerView);
if (getSupportActionBar() != null) {
getSupportActionBar().setTitle( R.string.drawer_closed );
invalidateOptionsMenu();
}
}
};
mDrawerLayout.setDrawerListener(mActionBarDrawerToggle);
}
@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
mActionBarDrawerToggle.syncState();
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
mActionBarDrawerToggle.onConfigurationChanged( newConfig );
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
return mActionBarDrawerToggle.onOptionsItemSelected(item) || super.onOptionsItemSelected(item);
}
}
styles.xml
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="windowActionBar">false</item>
<item name="android:windowNoTitle">true</item>
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<!-- Customize your theme here. -->
</style>
DrawerLayout
期望它的第一个子元素是实际布局,第二个子元素是抽屉。因此,要使其正常工作,您应该将布局更改为(假设您的整个抽屉仅包含一个 ListView
):
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.Toolbar
android:layout_height="150dp"
android:layout_width="match_parent"
android:id="@+id/toolbar"
android:background="?attr/colorPrimary"
android:minHeight="?android:attr/actionBarSize"/>
</LinearLayout>
<ListView
android:id="@+id/drawer_list"
android:layout_width="240dp"
android:layout_height="match_parent"
android:background="#000000"
android:layout_gravity="start"/>
</android.support.v4.widget.DrawerLayout>
您的 xml 布局似乎需要重新安排。 DrawerLayout
应该包含两个项目; 1) View
或 ViewGroup
设置为页面内容(例如,RelativeLayout
包含 Toolbar
和 Fragment
容器); 2) 一个 View
或 ViewGroup
,其中包含您的 NavigationDrawer
项(例如,ListView
)。
<android.support.v4.widget.DrawerLayout
android:id="@+id/navigation_drawer_layout"
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">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.Toolbar
android:id="@+id/your_toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:background="@color/your_toolbar_color"
android:minHeight="?attr/actionBarSize"/>
<FrameLayout
android:id="@+id/fragment_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/your_toolbar"/>
</RelativeLayout>
<ListView
android:id="@+id/your_drawer_list"
android:layout_width="@dimen/drawer_width"
android:layout_height="match_parent"
android:layout_gravity="left"
android:background="@color/your_drawer_color"
android:divider="@null"/>
</android.support.v4.widget.DrawerLayout>
您可以在此处获得更详细的解释和示例:
https://developer.android.com/training/implementing-navigation/nav-drawer.html
如果您的列表为空并且您的高度为 wrap_content
,则高度将为 0。将其更改为 match_parent
将使其填满屏幕,而不管内容如何。
<ListView
android:id="@+id/drawer_list"
android:layout_width="240dp"
android:layout_height="match_parent"
android:background="#000000"
android:layout_gravity="start"/>