Android ActionBarDrawerToggle构造函数具有不可满足的类型
我正在尝试实现一个导航抽屉,我得到了这个错误Android ActionBarDrawerToggle构造函数具有不可满足的类型,android,Android,我正在尝试实现一个导航抽屉,我得到了这个错误 ActionBarDrawerToggle无法应用于android.support.v7.widget.Toolbar mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, R.drawable.ic_drawer, R.string.drawer_open, R.string.drawer_close) R.d
ActionBarDrawerToggle无法应用于android.support.v7.widget.Toolbar
mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
R.drawable.ic_drawer, R.string.drawer_open,
R.string.drawer_close)
R.drawable.ic.drawer
给出错误信息。我搜索了整个stackoverflow
,发现另一个主题是,您需要创建一个工具栏,并将其添加为操作栏,然后将此工具栏传递给此构造函数,但我如何创建工具栏以便显示ic_drawer
我试过这个:
Toolbar toolbar = new ToolBar(getApplicationContext);
toolbar.setLogo(R.drawable.ic_drawer);
但当我运行时,应用程序崩溃了。请帮助我解决此问题。v4现在已不推荐使用。您应该在support-v7-appcompat中使用
您不再需要指定图像的资源:
mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, toolbar, R.string.drawer_open, R.string.drawer_close) {
@Override
public void onDrawerClosed(View drawerView) {
super.onDrawerClosed(drawerView);
}
@Override
public void onDrawerOpened(View drawerView) {
super.onDrawerOpened(drawerView);
}
};
mDrawerLayout.setDrawerListener(drawerToggle);
有关完整的示例,请参见《v4现已弃用》。您应该在support-v7-appcompat中使用
您不再需要指定图像的资源:
mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, toolbar, R.string.drawer_open, R.string.drawer_close) {
@Override
public void onDrawerClosed(View drawerView) {
super.onDrawerClosed(drawerView);
}
@Override
public void onDrawerOpened(View drawerView) {
super.onDrawerOpened(drawerView);
}
};
mDrawerLayout.setDrawerListener(drawerToggle);
有关完整示例,请参见我的代码:
public class HomeActivity extends ActionBarActivity implements
DrawerCloseListener {
private Toolbar toolbar;
private DrawerLayout drawer;
private ActionBarDrawerToggle drawerToggle;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
toolbar = (Toolbar) findViewById(R.id.home_toolbar);
setSupportActionBar(toolbar);
drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
drawerToggle = new ActionBarDrawerToggle(this, drawer, toolbar,
R.string.app_name, R.string.app_name);
drawerToggle.setHomeAsUpIndicator(R.drawable.icon_nav);
drawer.setDrawerListener(drawerToggle);
}
/*
* (non-avadoc) <p>Title: onResume</p> <p>Description: </p>
*
* @params
*
* @overrided @see android.support.v4.app.FragmentActivity#onResume()
*/
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
toolbar.setTitle("");
toolbar.setNavigationIcon(R.drawable.icon_nav);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (drawerToggle.onOptionsItemSelected(item)) {
return true;
}
// 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.
return super.onOptionsItemSelected(item);
}
/*
* (non-avadoc) <p>Title: onConfigurationChanged</p> <p>Description: </p>
*
* @params @param newConfig
*
* @overrided @see
* android.support.v7.app.ActionBarActivity#onConfigurationChanged
* (android.content.res.Configuration)
*/
@Override
public void onConfigurationChanged(Configuration newConfig) {
// TODO Auto-generated method stub
super.onConfigurationChanged(newConfig);
drawerToggle.onConfigurationChanged(newConfig);
}
/*
* (non-avadoc) <p>Title: onPostCreate</p> <p>Description: </p>
*
* @params @param savedInstanceState
*
* @overrided @see android.app.Activity#onPostCreate(android.os.Bundle)
*/
@Override
protected void onPostCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onPostCreate(savedInstanceState);
drawerToggle.syncState();
}
/*
* (non-avadoc) <p>Title: onBackPressed</p> <p>Description: </p>
*
* @params
*
* @overrided @see android.support.v7.app.ActionBarActivity#onBackPressed()
*/
@Override
public void onBackPressed() {
// TODO Auto-generated method stub
if (drawer.isDrawerOpen(Gravity.LEFT | Gravity.START)) {
drawer.closeDrawers();
return;
}
super.onBackPressed();
}
/*
* (non-avadoc) <p>Title: onDrawerClose</p> <p>Description: </p>
*
* @params
*
* @overrided @see com.yeepay.stall.abs.DrawerCloseListener#onDrawerClose()
*/
@Override
public void onDrawerClose() {
// TODO Auto-generated method stub
if (drawer.isDrawerOpen(Gravity.LEFT | Gravity.START)) {
drawer.closeDrawers();
}
}
看看我的代码:
public class HomeActivity extends ActionBarActivity implements
DrawerCloseListener {
private Toolbar toolbar;
private DrawerLayout drawer;
private ActionBarDrawerToggle drawerToggle;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
toolbar = (Toolbar) findViewById(R.id.home_toolbar);
setSupportActionBar(toolbar);
drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
drawerToggle = new ActionBarDrawerToggle(this, drawer, toolbar,
R.string.app_name, R.string.app_name);
drawerToggle.setHomeAsUpIndicator(R.drawable.icon_nav);
drawer.setDrawerListener(drawerToggle);
}
/*
* (non-avadoc) <p>Title: onResume</p> <p>Description: </p>
*
* @params
*
* @overrided @see android.support.v4.app.FragmentActivity#onResume()
*/
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
toolbar.setTitle("");
toolbar.setNavigationIcon(R.drawable.icon_nav);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (drawerToggle.onOptionsItemSelected(item)) {
return true;
}
// 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.
return super.onOptionsItemSelected(item);
}
/*
* (non-avadoc) <p>Title: onConfigurationChanged</p> <p>Description: </p>
*
* @params @param newConfig
*
* @overrided @see
* android.support.v7.app.ActionBarActivity#onConfigurationChanged
* (android.content.res.Configuration)
*/
@Override
public void onConfigurationChanged(Configuration newConfig) {
// TODO Auto-generated method stub
super.onConfigurationChanged(newConfig);
drawerToggle.onConfigurationChanged(newConfig);
}
/*
* (non-avadoc) <p>Title: onPostCreate</p> <p>Description: </p>
*
* @params @param savedInstanceState
*
* @overrided @see android.app.Activity#onPostCreate(android.os.Bundle)
*/
@Override
protected void onPostCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onPostCreate(savedInstanceState);
drawerToggle.syncState();
}
/*
* (non-avadoc) <p>Title: onBackPressed</p> <p>Description: </p>
*
* @params
*
* @overrided @see android.support.v7.app.ActionBarActivity#onBackPressed()
*/
@Override
public void onBackPressed() {
// TODO Auto-generated method stub
if (drawer.isDrawerOpen(Gravity.LEFT | Gravity.START)) {
drawer.closeDrawers();
return;
}
super.onBackPressed();
}
/*
* (non-avadoc) <p>Title: onDrawerClose</p> <p>Description: </p>
*
* @params
*
* @overrided @see com.yeepay.stall.abs.DrawerCloseListener#onDrawerClose()
*/
@Override
public void onDrawerClose() {
// TODO Auto-generated method stub
if (drawer.isDrawerOpen(Gravity.LEFT | Gravity.START)) {
drawer.closeDrawers();
}
}
ActionBarDrawerToggle构造函数如下所示
android.support.v7.app.ActionBarDrawerToggle.ActionBarDrawerToggle(Activity activity,
DrawerLayout drawerLayout,
Toolbar toolbar,
int openDrawerContentDescRes,
int closeDrawerContentDescRes)
您正在传递R.drawable.ic\u drawer
drawable而不是toolbar,这就是为什么会出现此错误
在布局文件中添加工具栏,如下所示
<RelativeLayout
...>
<include
android:id="@+id/tool_bar"
layout="@layout/toolbar"></include>
<android.support.v4.widget.DrawerLayout
android:layout_below="@+id/tool_bar"
...>
</android.support.v4.widget.DrawerLayout>
</RelativeLayout>
希望它能解决您的错误。ActionBarDrawerToggle构造函数如下所示
android.support.v7.app.ActionBarDrawerToggle.ActionBarDrawerToggle(Activity activity,
DrawerLayout drawerLayout,
Toolbar toolbar,
int openDrawerContentDescRes,
int closeDrawerContentDescRes)
您正在传递R.drawable.ic\u drawer
drawable而不是toolbar,这就是为什么会出现此错误
在布局文件中添加工具栏,如下所示
<RelativeLayout
...>
<include
android:id="@+id/tool_bar"
layout="@layout/toolbar"></include>
<android.support.v4.widget.DrawerLayout
android:layout_below="@+id/tool_bar"
...>
</android.support.v4.widget.DrawerLayout>
</RelativeLayout>
希望它能解决您的错误。使用不推荐的方法(v4)和需要可绘制的构造函数,这太疯狂了
ActionBarDrawerToggle的最新版本(2015年9月)使用带工具栏的构造函数。但是,如果只是使用操作栏切换导航抽屉,请改用
大宗报价
给定的活动将链接到指定的抽屉布局,其Actionbar的“向上”按钮将设置为自定义可绘制。
当抽屉关闭时,这个抽屉会显示一个汉堡图标,当抽屉打开时会显示一个箭头。抽屉打开时,它会在这两种状态之间设置动画
使用一个不推荐使用的方法(v4)和一个需要可绘制的构造函数是很疯狂的
ActionBarDrawerToggle的最新版本(2015年9月)使用带工具栏的构造函数。但是,如果只是使用操作栏切换导航抽屉,请改用
大宗报价
给定的活动将链接到指定的抽屉布局,其Actionbar的“向上”按钮将设置为自定义可绘制。
当抽屉关闭时,这个抽屉会显示一个汉堡图标,当抽屉打开时会显示一个箭头。抽屉打开时,它会在这两种状态之间设置动画
当我将工具栏作为第三个参数传递时,应用程序崩溃崩溃崩溃日志是什么@HeisenBerg@HeisenBerg您是否在布局文件中添加了工具栏?请检查我的更新答案。我已经找到了一个解决方案,从v7更改为v4。我以后一定会试试这个。非常感谢。当我将工具栏作为第三个参数传递时,应用程序崩溃。崩溃日志是什么@HeisenBerg@HeisenBerg您是否在布局文件中添加了工具栏?请检查我的更新答案。我已经找到了一个解决方案,从v7更改为v4。我以后一定会试试这个。非常感谢。实际上我用的是v7。我把它改成v4,现在可以工作了。谢谢你应该使用V7,只要把你的V4构造函数改成V7就行了——实际上我正在使用V7。我把它改成v4,现在可以工作了。谢谢您应该使用V7,只需将V4构造函数更改为V7即可