2017-08-20 18 views
0

私はアンドロイドアプリで引き出しを作成しました。画面の左上に表示されます。トグルをクリックすると、リストビューアイテムが左側に表示されます。Androidアプリで引き出しのトグルアイコンを変更するにはどうすればよいですか?

enter image description here

私はトグルをクリックしたとき、以下のように表示されます。:

enter image description here

は、今私はトグルボタンのアイコンを変更する画面の下に は、ホーム画面で以下のコードで表します:

mDrawerToggle.setHomeAsUpIndicator(R.drawable.ic_drawer); 
mDrawerToggle.setDrawerIndicatorEnabled(false); 

トグルアイコンがマイ引き出しに変更されましたが、リストビューアイテムwトグルをクリックすると表示されません。トグルアイコンを変更すると、トグルクリックが無効になるのはなぜかと思います。

public class MainActivity extends AppCompatActivity { 
    private DrawerLayout mDrawerLayout; 
    private ListView mDrawerList; 
    private ActionBarDrawerToggle mDrawerToggle; 
    private String[] mPlanetTitles; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.activity_main); 
     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
     getSupportActionBar().setHomeButtonEnabled(true); 
     getSupportActionBar().setDisplayShowTitleEnabled(false); 

     mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); 

     mDrawerList = (ListView) findViewById(R.id.left_drawer); 
     mPlanetTitles = getResources().getStringArray(R.array.planets_array); 
     // Set the adapter for the list view 
     mDrawerList.setAdapter(new ArrayAdapter<String>(this, 
       R.layout.drawer_list_item, mPlanetTitles)); 
     mDrawerList.setOnItemClickListener(new DrawerItemClickListener()); 

     mDrawerToggle = new ActionBarDrawerToggle(
       this,     /* host Activity */ 
       mDrawerLayout, 
       R.string.drawer_open, /* "open drawer" description for accessibility */ 
       R.string.drawer_close /* "close drawer" description for accessibility */ 
     ) { 
      public void onDrawerClosed(View view) { 
       invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu() 
      } 

      public void onDrawerOpened(View drawerView) { 
       invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu() 
      } 
     }; 
     mDrawerToggle.setHomeAsUpIndicator(R.drawable.ic_drawer); 
//  mDrawerToggle.setDrawerIndicatorEnabled(false); 
     mDrawerLayout.addDrawerListener(mDrawerToggle); 
    } 

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

    @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); 
     // Pass any configuration change to the drawer toggls 
     mDrawerToggle.onConfigurationChanged(newConfig); 
    } 


    /* The click listner for ListView in the navigation drawer */ 
    private class DrawerItemClickListener implements ListView.OnItemClickListener { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
     } 
    } 
} 
+0

は "トグルアイコンはトグルクリックを無効に変更私はなぜだろうか。" - それは彼らがそれを設計する方法です。ハンバーガーアイコンが必要ない場合は、 'ActionBarDrawerToggle'を使用しないでください。 'item.getItemId()== android.R.id.home'の場合は、' getSupportActionBar()。setHomeAsUpIndicator() 'でアイコンを設定し、' onOptionsItemSelected() 'にあなた自身の引出しを開閉します。 –

答えて

0

V7 ActionBarDrawerToggleは本当に唯一の2つのことを行います。それは/引き出しを開閉し、それがハンバーガーのアイコンとそのアニメーションを提供します。 setDrawerIndicatorEnabled(false)を呼び出すと、そのアイコンは削除されますが、トグルも無効になります。そのアイコンがほしいと思わない場合は、ActionBarDrawerToggleを使用せず、引き出しを自分で開閉する方が良いでしょう。

  • まず、ActionBarDrawerToggleのコードをすべて削除します。
  • 次に、希望するアイコンをgetSupportActionBar().setHomeAsUpIndicator()に設定します。
  • onOptionsItemSelected()の場合、MenuItemのIDがandroid.R.id.homeの場合は、引き出しを適切に開いたり閉じたりしてください。
  • 最後に、ActionBarDrawerToggleDrawerLayout.DrawerListenerの機能性は、基本的なSimpleDrawerListenerに置き換えることができます。

public class MainActivity extends AppCompatActivity { 
    private DrawerLayout mDrawerLayout; 
    private ListView mDrawerList; 
    private String[] mPlanetTitles; 

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

     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
     getSupportActionBar().setDisplayShowTitleEnabled(false); 

     mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); 

     mDrawerList = (ListView) findViewById(R.id.left_drawer); 
     mPlanetTitles = getResources().getStringArray(R.array.planets_array); 
     // Set the adapter for the list view 
     mDrawerList.setAdapter(new ArrayAdapter<String>(this, 
      R.layout.drawer_list_item, mPlanetTitles)); 
     mDrawerList.setOnItemClickListener(new DrawerItemClickListener()); 

     // *** Set your desired icon 
     getSupportActionBar().setHomeAsUpIndicator(R.drawable.ic_drawer); 

     // *** Replace the DrawerListener functionality of the ActionBarDrawerToggle 
     mDrawerLayout.addDrawerListener(new DrawerLayout.SimpleDrawerListener() { 
       @Override 
       public void onDrawerClosed(View view) { 
        invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu() 
       } 

       @Override 
       public void onDrawerOpened(View drawerView) { 
        invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu() 
       } 
      } 
     ); 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // *** If the home button is clicked, open/close the drawer as needed 
     if (item.getItemId() == android.R.id.home) { 
      if (mDrawerLayout.isDrawerOpen(GravityCompat.START)) { 
       mDrawerLayout.closeDrawer(GravityCompat.START); 
      } 
      else { 
       mDrawerLayout.openDrawer(GravityCompat.START); 
      } 

      return true; 
     } 

     return super.onOptionsItemSelected(item); 
    } 

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

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

    /* The click listner for ListView in the navigation drawer */ 
    private class DrawerItemClickListener implements ListView.OnItemClickListener { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
     } 
    } 
} 
0

使用syncState()トグルボタンのアイコンを変更した後:

以下は私の活動のクラスです。

mDrawerToggle.setHomeAsUpIndicator(R.drawable.ic_drawer); 
mDrawerToggle.setDrawerIndicatorEnabled(false); 
mDrawerToggle.syncState(); 
+1

このコードを追加した後、アイコンを変更することはできますが、そのアイコンをクリックしてもリストビュー項目は左側に表示されません。 Mikeが私の質問で「ActionBarDrawerToggle」はアイコンの変更をサポートしていないと答えた。 @ ZhaoYi 'ActionBarDrawerToggle'では、アイコンをある程度変更することができます。 –

+1

しかし、あなたが設定するアイコンは 'DrawerArrowDrawable'サブクラスでなければなりません。おそらくあなたが望むものではありません。私は上記の私の提案で提案した例を投稿することができます。 –

+1

@MikeM。デモコードは本当に役に立ちます。それがあなたのために難しくない場合は、例を投稿してください。ありがとう。 –

関連する問題