And*_*eaF 127 android android-support-library
昨天(17-10-2014)我已经更新了Android SDK和support-library-v4.jar
我的应用程序,现在我得到了相关的弃用警告ActionBarDrawerToggle
,阅读文档似乎我必须使用ActionBarDrawerToggle
in support-library-v7.appcompact.jar
.
这里我的活动的一些部分可能是相关的:
import android.app.ActionBar;
import android.app.Activity;
import android.content.res.Configuration;
import android.os.Bundle;
import android.support.v4.app.ActionBarDrawerToggle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.webkit.WebView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.TextView;
public class MyActivity extends FragmentActivity {
private ActionBar bar;
private CustomActionBarDrawerToggle mDrawerToggle;
private DrawerLayout mDrawer;
private ListView mDrawerList;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_infoviewer);
bar = this.getActionBar();
bar.setDisplayHomeAsUpEnabled(true);
bar.setHomeButtonEnabled(true);
bar.setDisplayShowTitleEnabled(false);
mDrawer = (DrawerLayout) findViewById(R.id.drawer_layout);
mDrawer.setBackgroundColor(getResources().getColor(R.color.White));
initNavMenu();
try {
mDrawerToggle = new CustomActionBarDrawerToggle(this, mDrawer);
} catch (RuntimeException e) {
e.printStackTrace();
}
mDrawer.setDrawerListener(mDrawerToggle);
}
....
private void initNavMenu() {
NavMenuAdapter mAdapter = MyDrawers.getDefaultDrawer(MyActivity.this, true);
mDrawerList = (ListView) findViewById(R.id.drawer);
mDrawerList.setBackgroundColor(getResources().getColor(R.color.GreenMoneyDark));
if (mDrawerList != null) mDrawerList.setAdapter(mAdapter);
mDrawerList.setOnItemClickListener(new DrawerItemClickListener(MyActivity.this, mDrawer, mDrawerList));
}
@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);
}
private class CustomActionBarDrawerToggle extends ActionBarDrawerToggle {
public CustomActionBarDrawerToggle(Activity mActivity,
DrawerLayout mDrawerLayout) {
super(mActivity, mDrawerLayout, R.drawable.action_drawer,
R.string.ns_menu_open, R.string.ns_menu_close);
}
@Override
public void onDrawerClosed(View view) {
bar.setTitle(getString(R.string.ns_menu_close));
invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
}
@Override
public void onDrawerOpened(View drawerView) {
bar.setTitle(getString(R.string.ns_menu_open));
invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
}
}
}
Run Code Online (Sandbox Code Playgroud)
我试图复制support-library-v7并替换
import android.support.v4.app.ActionBarDrawerToggle;
Run Code Online (Sandbox Code Playgroud)
同
import android.support.v7.app.ActionBarDrawerToggle;
Run Code Online (Sandbox Code Playgroud)
这导致了编译问题
public CustomActionBarDrawerToggle(Activity mActivity,
DrawerLayout mDrawerLayout) {
super(mActivity, mDrawerLayout, R.drawable.action_drawer,
R.string.ns_menu_open, R.string.ns_menu_close);
}
Run Code Online (Sandbox Code Playgroud)
所以,我试图取代R.drawable.action_drawer
与
public CustomActionBarDrawerToggle(Activity mActivity,
DrawerLayout mDrawerLayout) {
super(mActivity, mDrawerLayout,new Toolbar(MyActivity.this) ,
R.string.ns_menu_open, R.string.ns_menu_close);
}
Run Code Online (Sandbox Code Playgroud)
这个编译但在运行时崩溃
java.lang.NoClassDefFoundError: Failed resolution of: Landroid/support/v7/appcompat/R$attr;
at android.support.v7.widget.Toolbar.<init>(Toolbar.java:190)
at android.support.v7.widget.Toolbar.<init>(Toolbar.java:186)
Run Code Online (Sandbox Code Playgroud)
请注意,它android-support-v7-appcompat.jar
已在项目依赖项中正确添加
Sil*_*orm 66
仅添加android-support-v7-appcompat.jar
到库依赖项是不够的,您还必须在项目中导入可在SDK中找到的模块,\android-sdk\extras\android\support\v7\appcompat
然后添加模块依赖项以这种方式配置项目结构
否则只包含支持库的类文件,应用程序无法加载导致错误的其他资源.
此外,reVerse建议更换此项
public CustomActionBarDrawerToggle(Activity mActivity,
DrawerLayout mDrawerLayout) {
super(mActivity, mDrawerLayout,new Toolbar(MyActivity.this) ,
R.string.ns_menu_open, R.string.ns_menu_close);
}
Run Code Online (Sandbox Code Playgroud)
同
public CustomActionBarDrawerToggle(Activity mActivity,
DrawerLayout mDrawerLayout) {
super(mActivity, mDrawerLayout, R.string.ns_menu_open, R.string.ns_menu_close);
}
Run Code Online (Sandbox Code Playgroud)
reV*_*rse 60
您无需使用ActionBarDrawerToggle
需要工具栏的超级调用.这意味着不使用以下构造函数:
ActionBarDrawerToggle(Activity activity, DrawerLayout drawerLayout, Toolbar toolbar, int openDrawerContentDescRes, int closeDrawerContentDescRes)
Run Code Online (Sandbox Code Playgroud)
你应该使用这个:
ActionBarDrawerToggle(Activity activity, DrawerLayout drawerLayout, int openDrawerContentDescRes, int closeDrawerContentDescRes)
Run Code Online (Sandbox Code Playgroud)
所以基本上你唯一要做的就是删除你的自定义drawable
:
super(mActivity, mDrawerLayout, R.string.ns_menu_open, R.string.ns_menu_close);
Run Code Online (Sandbox Code Playgroud)
更多关于文档中的"新"ActionBarDrawerToggle (单击).
小智 27
你必须使用 import android.support.v7.app.ActionBarDrawerToggle;
并使用构造函数
public CustomActionBarDrawerToggle(Activity mActivity,DrawerLayout mDrawerLayout)
{
super(mActivity, mDrawerLayout, R.string.ns_menu_open, R.string.ns_menu_close);
}
Run Code Online (Sandbox Code Playgroud)
如果抽屉切换按钮变暗,则必须使用支持库中提供的supportActionBar.
您可以通过以下链接实现supportActionbar:http://developer.android.com/training/basics/actionbar/setting-up.html
绝缘
drawer.setDrawerListener(toggle);
Run Code Online (Sandbox Code Playgroud)
您可以使用
drawer.addDrawerListener(toggle);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
101015 次 |
最近记录: |