2013-06-18 11 views
6

私はDrawerLayoutで活動しています。私は引き出しを2つの異なる方法で開くことができます...画面の左側の領域を右にスワイプし、アプリのタイトルをクリックします。 I にはアプリアイコンが表示されず、タイトルのみが表示されます。私はこれをGoogleの推奨するとおり正確に実装しました。Creating a Navigation Drawer: Open and Close with the App IconDrawerLayoutをタイトルのみで切り替えます(アプリケーションアイコンなし)?

引き出し自体の開閉はすべて機能しています。ただし、使用すると思われる標準DrawerLayoutアイコンは表示されません。代わりに、私は定期的なキャレットを得る(より小さいサインのように見える)。

アプリアイコンをActionBarに戻すとすぐに、期待どおりに動作します。引き出しが開いたり閉じたりすると、引き出しレイアウトアイコンが表示され、動かされます。私は自分のスタイルのXMLファイルとプログラムで両方のアプリアイコンを削除しようとしました。

DrawerLayoutアイコンをアプリアイコンなしで使用する方法はありますか?

更新:私は解決策を見つけましたが、それは解決策よりもハックです。私は単純に1x1ピクセルの透明なPNG(blank.png)を作成し、それをstyles.xmlファイルの自分のアプリアイコンとして設定しました。 >のonCreate()

this.navDrawerToggle = new ActionBarDrawerToggle 
(
    this, 
    this.navDrawerLayout, 
    R.drawable.icon_nav_drawer, 
    R.string.nav_drawer_open, 
    R.string.nav_drawer_closed 
) 
{ 
    public void onDrawerClosed(View view) {} 
    public void onDrawerOpened(View drawerView) {} 
}; 

MainActivity - - > onPostCreate()

super.onPostCreate(savedInstanceState); 
this.navDrawerToggle.syncState(); 

のstyles.xml

<style name="MyCustomTheme" parent="android:Theme.Holo.Light.DarkActionBar"> 
    <item name="android:actionBarStyle">@style/MyCustomActionBar</item> 
    <item name="android:icon">@drawable/blank</item> 
</style> 

<style name="MyCustomActionBar" parent="@android:style/Widget.Holo.ActionBar"> 
    <item name="android:displayOptions">showHome|showTitle|homeAsUp</item> 
</style> 

MainActivity:以下のすべての相対的なコードであります

MainActivity - > onResume()

this.navDrawer.setOnItemClickListener(new DrawerItemClickListener()); 
this.navDrawerLayout.setDrawerListener(this.navDrawerToggle); 

MainActivity - > onPause()

this.navDrawer.setOnItemClickListener(null); 
this.navDrawerLayout.setDrawerListener(null); 

MainActivity - > onConfigurationChanged(構成newconfigに保存)

super.onConfigurationChanged(newConfig); 
navDrawerToggle.onConfigurationChanged(newConfig); 

MainActivity - 私はこのことについて興味があった> onOptionsItemSelected(MenuItemの項目)

if (this.navDrawerToggle.onOptionsItemSelected(item)) {return true;} 
else 
{ 
    // A bunch of item click handling happens here... 

    return true; 
} 
+1

次回は、あなたが何が悪いのかを知るためのコードを追加してください王様。 – velazcod

+0

申し訳ありません...コードが掲載されました! – Jabari

+0

下記の私の更新を見てください。 setDisplayOptionsをスタイルに設定しようとする代わりに使用すると、スタイルが修正されます。 – velazcod

答えて

0

getActionBar().setIcon(android.R.color.transparent);

..:

mDrawerToggle.syncState(); 

をので、あなたのコードは次のようになります...;)

+0

私がこれを投稿したとき(前のAndroidのいくつかのバージョン)、これが私が試した最初のものの1つでした。それは機能的に機能しましたが、アイコンはまだ同じスペースを占めていました。それは今の場合ですか?もしそうでなければ、私はこれをテスト後に新しい受け入れられた答えにするでしょう。 – Jabari

+0

あなたが話しているバージョン。私は5.1(lolipop)と4.4.2(kit kat)でうまく動作しています。 – karan

+0

この投稿は2歳以上で、私はIce Cream SandwichとGingerbread(私はHonecombについては気にしませんでした)と互換性を保つようにしていました。回答が受け入れられました! – Jabari

13

ので、私はDrawerLayout用のサンプルでそれを試してみましたが、それがうまく働きました。また、あなた自身の引き出しアイコンドロアブルを使用する必要があるようですが、とにかくお勧めです。このサイトCreating a Navigation Drawerからデフォルトアセットをダウンロードして、それぞれのdrawableリソースフォルダに入れることができます。ここで

は私のために働いていたものです:

ActionBar actionBar = getActionBar(); 

// Let's get rid of the app icon here 
actionBar.setIcon(null); 
actionBar.setTitle("App Name"); 

// Setting these 3 options allows us to show the title as well as a "Home" elements 
// "Home" elements include the Up and/or Drawer icon. The DISPLAY_HOME_AS_UP will enable 
// and show the Drawer icon, we'll be "replacing" the "up" button with the drawer icon below 
actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_TITLE 
     | ActionBar.DISPLAY_SHOW_HOME 
     | ActionBar.DISPLAY_HOME_AS_UP); 

// Get a reference of the DrawerLayout 
DrawerLayout drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); 
drawerLayout.setDrawerListener(drawerToggle); 

// Setting ActionBarDrawerToggle will allow you to set the drawables for the drawer 
// (this will also give you the nice/smooth animation) as well as allow you to do some 
// other things depending on the events: onDrawerClosed & onDrawerOpened. 
ActionBarDrawerToggle drawerToggle = new ActionBarDrawerToggle(
      this,     /* host Activity */ 
      drawerLayout,   /* DrawerLayout object */ 
      R.drawable.ic_drawer, /* nav drawer image to replace 'Up' caret */ 
      R.string.drawer_open, /* "open drawer" description for accessibility */ 
      R.string.drawer_closed /* "close drawer" description for accessibility */ 
    ) { 
    public void onDrawerClosed(View view) { 
     actionBar.setTitle("Closed..."); 
     invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu() 
    } 

    public void onDrawerOpened(View drawerView) { 
     actionBar.setTitle("Open..."); 
     invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu() 
    } 
}; 

// Set a listener to be notified of drawer events. 
drawerLayout.setDrawerListener(drawerToggle); 

はUPDATE:それは、Androidのように思える:アクションバーのスタイルのdisplayOptionsはは計上されていません。代わりに、actionBar.setDisplayOptions(intオプション)を使用してください。

+1

あなたが上に挙げたものは、私が2つのことを除いて実装したものとほとんど正確です。 1)私は 'actionbar.setIcon(null)'を使用しませんでした。代わりに、 'actionbar.setDisplayShowHomeEnabled(false)'を使用しました。 2)私は最終的に、プログラムでActionBarを変更し、表示オプションを含めてstyles.xmlファイルで変更しました。 'actionbar.setIcon(null)'を追加して何が起こるかを見てみましょう。 – Jabari

+0

setDisplayShowHomeEnabled(false)は、ActionBar.DISPLAY_SHOW_HOMEというオプションを持たないこととほぼ同じです。 SetDisplayShowHomeEnabled(true)またはオプションを設定する必要があります。 – velazcod

+0

まだ私のために働かなかった。 ActionBarSherlockを使用していますか(私はそうではありません)。私は4.2.2も走っています。私はすでに 'setDisplayShowHomeEnabled(false)'を削除していました。私は一時的な解決策を見つけました...私は単純に1x1の透明なPNGファイルを作成し、それをstyles.xmlファイルを介して私のアプリアイコンとして使用しました。それはちょうどハックのように感じる。 – Jabari

0

次のメソッドを呼び出す必要があるトグル引き出しを設定した後:これは私のために働いた

mDrawerToggle = new ActionBarDrawerToggle(
      this,     /* host Activity */ 
      mDrawerLayout,   /* DrawerLayout object */ 
      R.drawable.ic_drawer, /* nav drawer image to replace 'Up' caret */ 
      R.string.drawer_open, /* "open drawer" description for accessibility */ 
      R.string.drawer_close /* "close drawer" description for accessibility */ 
      ) { 
     public void onDrawerClosed(View view) { 
      actionBar.setTitle(mTitle); 
      invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu() 
     } 


     public void onDrawerOpened(View drawerView) { 
      actionBar.setTitle("Preview Mode"); 
      invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu() 
     } 
    }; 

    mDrawerToggle.syncState(); 
    mDrawerLayout.setDrawerListener(mDrawerToggle); 
関連する問題