어제 (17-10-2014) 내가 업데이 트 안드로이드 SDK를 가지고 support-library-v4.jar
내 앱의, 지금은 관련 사용 중단 경고가가 ActionBarDrawerToggle
, 읽기, 문서 것은 내가를 사용해야 할 것으로 보인다 ActionBarDrawerToggle
에서 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()
}
}
}
support-library-v7을 복사하고 바꾸려고했습니다.
import android.support.v4.app.ActionBarDrawerToggle;
와
import android.support.v7.app.ActionBarDrawerToggle;
이로 인해 컴파일 문제가 발생했습니다.
public CustomActionBarDrawerToggle(Activity mActivity,
DrawerLayout mDrawerLayout) {
super(mActivity, mDrawerLayout, R.drawable.action_drawer,
R.string.ns_menu_open, R.string.ns_menu_close);
}
나는 대체하기 위해 노력했다 그래서 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);
}
이 컴파일하지만 런타임에 충돌
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)
참고 android-support-v7-appcompat.jar
올바르게 프로젝트 종속성에 추가
답변
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);
}
와
public CustomActionBarDrawerToggle(Activity mActivity,
DrawerLayout mDrawerLayout) {
super(mActivity, mDrawerLayout, R.string.ns_menu_open, R.string.ns_menu_close);
}
답변
툴바ActionBarDrawerToggle
가 필요한 슈퍼 콜을 사용할 필요가 없습니다 . 이것은 다음 생성자를 사용하는 대신 의미합니다.
ActionBarDrawerToggle(Activity activity, DrawerLayout drawerLayout, Toolbar toolbar, int openDrawerContentDescRes, int closeDrawerContentDescRes)
당신은 이것을 사용해야합니다 :
ActionBarDrawerToggle(Activity activity, DrawerLayout drawerLayout, int openDrawerContentDescRes, int closeDrawerContentDescRes)
따라서 기본적으로 수행해야 할 유일한 것은 사용자 정의를 제거하는 것입니다 drawable
.
super(mActivity, mDrawerLayout, R.string.ns_menu_open, R.string.ns_menu_close);
“새로운”ActionBarDrawerToggle에 대한 추가 정보 문서에서 에 클릭하십시오 (클릭) .
답변
당신은 사용해야합니다 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);
}
서랍 토글 버튼이 어두워지면 지원 라이브러리에 제공된 supportActionBar를 사용해야합니다.
다음 링크에서 supportActionbar를 구현할 수 있습니다. http://developer.android.com/training/basics/actionbar/setting-up.html
답변
대신해서
drawer.setDrawerListener(toggle);
당신이 사용할 수있는
drawer.addDrawerListener(toggle);