2016-01-25 2 views
0

Я использую appcompat v7 и конструкцию поддержки 23.1.1. Я хочу добавить кнопку «Назад» в анимацию кнопок гамбургера, когда обратное нажатие приложения вернется на начальную страницу.Как добавить анимацию кнопки кнопки в анимацию кнопки гамбургера

Теперь у меня есть кнопка гамбургера. Когда он нажат в главном окне (отмечен оранжевым прямоугольником), открывается навигационная навигационная панель, выбранная Home (обозначенная как красный прямоугольник), когда приложение переходит к выбранному окну, снова появляется кнопка гамбургера (желтый прямоугольник), и я хотел бы ее изменить. enter image description here

Мой MainActivity.java:

public class MainActivity extends AppCompatActivity implements FragmentDrawer.FragmentDrawerListener { 

    private static String TAG = MainActivity.class.getSimpleName(); 

    private Toolbar mToolbar; 
    private TabLayout tabLayout; 
    private ViewPager viewPager; 
    private FragmentDrawer drawerFragment; 

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

     viewPager = (ViewPager) findViewById(R.id.view_pager); 
     viewPager.setAdapter(new PagerAdapter(this)); 

     viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout)); 

     tabLayout = (TabLayout) findViewById(R.id.tab_layout); 
     tabLayout.setupWithViewPager(viewPager); 

     mToolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(mToolbar); 

     mToolbar.setNavigationOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       getSupportFragmentManager().popBackStack(); 
      } 
     }); 
     drawerFragment = (FragmentDrawer) 
       getSupportFragmentManager().findFragmentById(R.id.fragment_navigation_drawer); 
     drawerFragment.setUp(R.id.fragment_navigation_drawer, (DrawerLayout) findViewById(R.id.drawer_layout), mToolbar); 
     drawerFragment.setDrawerListener(this); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.menu_main, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     switch (item.getItemId()) { 
      case R.id.action_settings: 
       return true; 
      case R.id.action_search: 
       Toast.makeText(getApplicationContext(), "Search action is selected!", Toast.LENGTH_SHORT).show(); 
       return true; 
      default: 
       return super.onOptionsItemSelected(item); 
     } 
    } 

    @Override 
    public void onDrawerItemSelected(View view, int position) { 
     displayView(position); 
    } 

    private void displayView(int position) { 
     Fragment fragment = null; 
     String title = getString(R.string.app_name); 
     switch (position) { 
      case 0: 
       fragment = new HomeFragment(); 
       title = getString(R.string.title_home); 
       break; 
      case 1: 
       fragment = new FriendsFragment(); 
       title = getString(R.string.title_friends); 
       break; 
      case 2: 
       fragment = new MessagesFragment(); 
       title = getString(R.string.title_messages); 
       break; 
      default: 
       break; 
     } 

     if (fragment != null) { 
      getSupportFragmentManager() 
        .beginTransaction() 
        .replace(R.id.container, fragment) 
        .addToBackStack(fragment.getClass().getSimpleName()) 
        .commit(); 
      mToolbar.setTitle(title); 
     } 
    } 
} 

FragmentDrawer.java:

public class FragmentDrawer extends Fragment { 

    private static String TAG = FragmentDrawer.class.getSimpleName(); 

    private RecyclerView recyclerView; 
    private ActionBarDrawerToggle mDrawerToggle; 
    private DrawerLayout mDrawerLayout; 
    private NavigationDrawerAdapter adapter; 
    private View containerView; 
    private static String[] titles = null; 
    private FragmentDrawerListener drawerListener; 

    public FragmentDrawer() { 

    } 

    public void setDrawerListener(FragmentDrawerListener listener) { 
     this.drawerListener = listener; 
    } 

    public static List<NavDrawerItem> getData() { 
     List<NavDrawerItem> data = new ArrayList<>(); 


     // preparing navigation drawer items 
     for (int i = 0; i < titles.length; i++) { 
      NavDrawerItem navItem = new NavDrawerItem(); 
      navItem.setTitle(titles[i]); 
      data.add(navItem); 
     } 
     return data; 
    } 

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

     // drawer labels 
     titles = getActivity().getResources().getStringArray(R.array.nav_drawer_labels); 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     // Inflating view layout 
     View layout = inflater.inflate(R.layout.fragment_navigation_drawer, container, false); 
     recyclerView = (RecyclerView) layout.findViewById(R.id.drawerList); 

     adapter = new NavigationDrawerAdapter(getActivity(), getData()); 
     recyclerView.setAdapter(adapter); 
     recyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); 
     recyclerView.addOnItemTouchListener(new RecyclerTouchListener(getActivity(), recyclerView, new ClickListener() { 
      @Override 
      public void onClick(View view, int position) { 
       drawerListener.onDrawerItemSelected(view, position); 
       mDrawerLayout.closeDrawer(containerView); 
      } 

      @Override 
      public void onLongClick(View view, int position) { 

      } 
     })); 

     return layout; 
    } 


    public void setUp(int fragmentId, DrawerLayout drawerLayout, final Toolbar toolbar) { 
     containerView = getActivity().findViewById(fragmentId); 
     mDrawerLayout = drawerLayout; 
     mDrawerToggle = new ActionBarDrawerToggle(getActivity(), drawerLayout, toolbar, R.string.drawer_open, R.string.drawer_close) { 
      @Override 
      public void onDrawerOpened(View drawerView) { 
       super.onDrawerOpened(drawerView); 
       getActivity().invalidateOptionsMenu(); 
      } 

      @Override 
      public void onDrawerClosed(View drawerView) { 
       super.onDrawerClosed(drawerView); 
       getActivity().invalidateOptionsMenu(); 
      } 

      @Override 
      public void onDrawerSlide(View drawerView, float slideOffset) { 
       super.onDrawerSlide(drawerView, slideOffset); 
       toolbar.setAlpha(1 - slideOffset/2); 
      } 
     }; 

     mDrawerLayout.setDrawerListener(mDrawerToggle); 
     mDrawerLayout.post(new Runnable() { 
      @Override 
      public void run() { 
       mDrawerToggle.syncState(); 
      } 
     }); 

    } 

    public static interface ClickListener { 
     public void onClick(View view, int position); 

     public void onLongClick(View view, int position); 
    } 

    static class RecyclerTouchListener implements RecyclerView.OnItemTouchListener { 

     private GestureDetector gestureDetector; 
     private ClickListener clickListener; 

     public RecyclerTouchListener(Context context, final RecyclerView recyclerView, final ClickListener clickListener) { 
      this.clickListener = clickListener; 
      gestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() { 
       @Override 
       public boolean onSingleTapUp(MotionEvent e) { 
        return true; 
       } 

       @Override 
       public void onLongPress(MotionEvent e) { 
        View child = recyclerView.findChildViewUnder(e.getX(), e.getY()); 
        if (child != null && clickListener != null) { 
         clickListener.onLongClick(child, recyclerView.getChildPosition(child)); 
        } 
       } 
      }); 
     } 

     @Override 
     public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) { 

      View child = rv.findChildViewUnder(e.getX(), e.getY()); 
      if (child != null && clickListener != null && gestureDetector.onTouchEvent(e)) { 
       clickListener.onClick(child, rv.getChildPosition(child)); 
      } 
      return false; 
     } 

     @Override 
     public void onTouchEvent(RecyclerView rv, MotionEvent e) { 
     } 

     @Override 
     public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) { 

     } 
    } 

    public interface FragmentDrawerListener { 
     public void onDrawerItemSelected(View view, int position); 
    } 
} 

NavDrawerItem.java:

public class NavDrawerItem { 
    private boolean showNotify; 
    private String title; 


    public NavDrawerItem() { 

    } 

    public NavDrawerItem(boolean showNotify, String title) { 
     this.showNotify = showNotify; 
     this.title = title; 
    } 

    public boolean isShowNotify() { 
     return showNotify; 
    } 

    public void setShowNotify(boolean showNotify) { 
     this.showNotify = showNotify; 
    } 

    public String getTitle() { 
     return title; 
    } 

    public void setTitle(String title) { 
     this.title = title; 
    } 
} 

DrawerActivity.java : 

    public class DrawerActivity extends AppCompatActivity implements FragmentDrawer.FragmentDrawerListener{ 

    private Toolbar mToolbar; 
    private FragmentDrawer drawerFragment; 

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

     mToolbar = (Toolbar) findViewById(R.id.toolbar); 

     setSupportActionBar(mToolbar); 

     drawerFragment = (FragmentDrawer) 
       getSupportFragmentManager().findFragmentById(R.id.fragment_navigation_drawer); 
     drawerFragment.setUp(R.id.fragment_navigation_drawer, (DrawerLayout) findViewById(R.id.drawer_layout), mToolbar); 
     drawerFragment.setDrawerListener(this); 

     // display the first navigation drawer view on app launch 
     displayView(0); 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     switch (item.getItemId()) { 
      case R.id.action_settings: 
       return true; 
      case R.id.action_search: 
       Toast.makeText(getApplicationContext(), "Search action is selected!", Toast.LENGTH_SHORT).show(); 
       return true; 
      default: 
       return super.onOptionsItemSelected(item); 

     } 
    } 

    @Override 
    public void onDrawerItemSelected(View view, int position) { 
     displayView(position); 
    } 

    private void displayView(int position) { 
     Fragment fragment = null; 
     String title = getString(R.string.app_name); 
     switch (position) { 
      case 0: 
       fragment = new HomeFragment(); 
       title = getString(R.string.title_home); 
       break; 
      case 1: 
       fragment = new FriendsFragment(); 
       title = getString(R.string.title_friends); 
       break; 
      case 2: 
       fragment = new MessagesFragment(); 
       title = getString(R.string.title_messages); 
       break; 
      default: 
       break; 
     } 

     if (fragment != null) { 
      FragmentManager fragmentManager = getSupportFragmentManager(); 
      FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
      fragmentTransaction.replace(R.id.container, fragment); 
      fragmentTransaction.commit(); 

      // set the toolbar title 
      getSupportActionBar().setTitle(title); 
     } 
    } 
} 
+0

Я не могу добавлять изображения в моем вопросе пока нет. Поэтому добавьте ссылку на картинку: http://i.stack.imgur.com/sbwkd.png – JonasSeputis

+0

, пожалуйста, отредактируйте описание и добавьте ссылку. также добавьте фрагмент кода, который вы пробовали до сих пор. – phoenix

ответ

0

Если активность фигурировали в вашей третьей картине является новый, вы можете просто добавить следующий код в новый акт метод onCreate(). это может помочь ...

final ActionBar toolbar = getSupportActionBar(); 
if (toolbar != null) { 
    toolbar.setDisplayHomeAsUpEnabled(true); 
} 

Если `s в одной и той же деятельности, и только различные фрагменты через ViewPager, используйте Toolbar.setNavigationIcon(), чтобы изменить вверх значок.

+0

Небольшой текст, описывающий точку кода, будет приветствоваться. –

0

Попробуйте этот путь в вашем XML

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fitsSystemWindows="true"> 

    <android.support.v7.widget.Toolbar 
     android:id="@+id/toolbar" 
     android:layout_width="match_parent" 
     android:layout_height="56dp" 
     android:layout_gravity="start" 
     android:background="@android:color/transparent" 
     android:minHeight="?attr/actionBarSize" 
     app:popupTheme="@style/ThemeOverlay.AppCompat.Light" 
     app:theme="@style/toolBarStyle" 
     app:titleTextAppearance="@style/Toolbar.TitleText" /> 

    <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:app="http://schemas.android.com/apk/res-auto" 
     xmlns:tools="http://schemas.android.com/tools" 
     android:id="@+id/drawer_layout" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_below="@+id/toolbar" 
     android:fitsSystemWindows="true"> 

     <RelativeLayout 
      android:id="@+id/container" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:layout_marginTop="0dp" 
      android:background="@android:color/transparent" /> 

     <fragment 
      android:id="@+id/navigation_drawer" 
      class="com.buzzintown.consumer.drawer.NavigationDrawerFragment" 
      android:layout_width="310dp" 
      android:layout_height="match_parent" 
      android:layout_gravity="start" 
      tools:layout="@layout/drawer_layout" /> 
    </android.support.v4.widget.DrawerLayout> 
</RelativeLayout> 
Смежные вопросы