web-dev-qa-db-ja.com

ActionBarDrawerToggleがドロワーインジケーターを設定していません

アプリにナビゲーションドロワーを追加しようとしています。すべて正常に機能していますが、Androidのic_drawerに置き換えても、矢印アイコンが表示されます。これが私のコードです:

private ActionBarDrawerToggle mDrawerToggle;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    DrawerLayout mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
    ExpandableListView mDrawerList = (ExpandableListView) findViewById(R.id.left_drawer);

    mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow,
            GravityCompat.START);
    mDrawerList.setAdapter(new DrawerListAdapter(this));
    mDrawerList.setOnChildClickListener(new DrawerItemClickListener());

    mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
            R.drawable.ic_launcher, R.string.drawer_open,
            R.string.drawer_close);

    Log.d("Mudit",
            "mDrawerToggle" + mDrawerToggle.isDrawerIndicatorEnabled()); // returns true

    mDrawerLayout.setDrawerListener(mDrawerToggle);

    getActionBar().setDisplayHomeAsUpEnabled(true);
    getActionBar().setHomeButtonEnabled(true);

    getActionBar().setDisplayShowHomeEnabled(false);

}

/**
 * When using the ActionBarDrawerToggle, you must call it during
 * onPostCreate() and onConfigurationChanged()...
 */

@Override
protected void onPostCreate(Bundle savedInstanceState) {
    super.onPostCreate(savedInstanceState);
    mDrawerToggle.syncState();
}

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    mDrawerToggle.onConfigurationChanged(newConfig);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    if (mDrawerToggle.onOptionsItemSelected(item)) {
        return true;
    }
    return super.onOptionsItemSelected(item);
}

XML:

 <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" >

    <ScrollView
        Android:id="@+id/content_frame"
        Android:layout_width="match_parent"
        Android:layout_height="match_parent">

        <LinearLayout
            Android:layout_width="match_parent"
            Android:layout_height="wrap_content"
            Android:orientation="vertical" >

        </LinearLayout>
    </ScrollView>

    <ExpandableListView
        Android:id="@+id/left_drawer"
        Android:layout_width="240dp"
        Android:layout_height="match_parent"
        Android:layout_gravity="start"
        Android:background="#ffffff"
        Android:dividerHeight="0dp" />

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

私はオンラインでさまざまなコードサンプルを見てきましたが、それらはすべて同じことをしています。なぜそれが私のために働いていないのか分かりません。

助けてください。

14
mudit

あなたは使用する必要があります

getActionBar().setDisplayShowHomeEnabled(true);

の代わりに

getActionBar().setDisplayShowHomeEnabled(false);

乾杯、

フェリックス

編集:XMLを介してアイコンを非表示にする方法は次のとおりです:

これをstyles.xmlに追加します:(暗いアクションバーを使用している場合は、Android:Widget.Holo.Light.ActionBar.SolidをAndroid:Widget.Holo.ActionBar.Solidに置き換えます)

<style name="ActionBarStyle" parent="Android:Widget.Holo.Light.ActionBar.Solid">
    <item name="Android:icon">@Android:color/transparent</item>
</style>

次に、これをAndroidManifest.xmlで定義したテーマに追加します(標準は/res/values-v11/styles.xmlのAppBaseThemeです-AppBaseTheme:

<item name="Android:actionBarStyle">@style/ActionBarStyle</item>

お役に立てれば!

22
fekle

このコードを試してください

   @Override
    protected void onPostCreate(Bundle savedInstanceState) {
        super.onPostCreate(savedInstanceState);
        // Sync the toggle state after onRestoreInstanceState has occurred.
        actbardrawertoggle.syncState();
    }
22
Sunil Kumar

これは、メニューアイコンを戻る矢印から戻したいときにうまくいきました

private void updateNavigationIcon() {
    if (getSupportFragmentManager().getBackStackEntryCount() == 0
            && getSupportActionBar() != null) {
        getSupportActionBar().setDisplayHomeAsUpEnabled(false);
        toggle.syncState();
    }
}
2
XurajB

ShowGlobalContextActionBar()メソッド(NavigationDrawerFragment.Javaクラス)内に次の行を追加するだけです。

actionBar.setHomeAsUpIndicator(R.drawable.ic_action_menu);

コードスニペット:

private void showGlobalContextActionBar() {
        ActionBar actionBar = getActionBar();
        actionBar.setDisplayShowTitleEnabled(true);
        actionBar.setHomeAsUpIndicator(R.drawable.ic_action_menu);
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
        actionBar.setTitle(R.string.app_name);
    }
1
Maddy