2016-08-21 72 views
1

我使用导航抽屉,我希望我的应用程序的徽标出现在我的导航抽屉工具栏的中心。我在网上尝试了很多解决方案,但我的徽标出现在预览中,但是当我运行该应用程序时,它不在我的工具栏中。 这是我的应用程序栏布局代码:ImageView不会出现在导航抽屉工具栏

<?xml version="1.0" encoding="utf-8"?> 

<android.support.design.widget.AppBarLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:theme="@style/AppTheme.AppBarOverlay"> 

    <android.support.v7.widget.Toolbar 
     android:id="@+id/toolbar" 
     android:layout_width="match_parent" 
     android:layout_height="?attr/actionBarSize" 
     android:minHeight="?attr/actionBarSize" 
     app:theme="@style/ThemeOverlay.AppCompat.ActionBar"> 

     <RelativeLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content"> 

      <ImageView 
       android:id="@+id/logoActionBar" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_centerHorizontal="true" 
       android:src="@drawable/actionbarlogo" /> 
     </RelativeLayout> 
    </android.support.v7.widget.Toolbar> 
</android.support.design.widget.AppBarLayout> 

<include layout="@layout/content_home_customer" /> 

这是我的导航抽屉的主要活动:

public class BaseActivity extends AppCompatActivity { 


    private DrawerLayout mDrawer; 
    private Toolbar toolbar; 
    private NavigationView nvDrawer; 
    private ActionBarDrawerToggle drawerToggle; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_home_customer); 
     toolbar = (Toolbar) findViewById(R.id.toolbar); 
     // toolbar.setLogo(R.drawable.actionbarlogo); 
// 
     setSupportActionBar(toolbar); 

     Constants cnst = new Constants(); 
     cnst.getNearbyusers(33.522212, 73.091904); 

     // getSupportActionBar().setIcon(R.drawable.logo_final); 
     mDrawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     nvDrawer = (NavigationView) findViewById(R.id.nav_view); 
     setupDrawerContent(nvDrawer); 
     drawerToggle = setupDrawerToggle(); 
     mDrawer.addDrawerListener(drawerToggle); 
     // getSupportActionBar().setDisplayHomeAsUpEnabled(false); 

     View hView = nvDrawer.getHeaderView(0); 
     TextView nav_username = (TextView) hView.findViewById(R.id.fullNameUser); 
     TextView nav_emailuser = (TextView) hView.findViewById(R.id.emailUser); 
     ImageView nav_profilepic = (ImageView) hView.findViewById(R.id.ProfilePhoto); 

     Fragment home = new HomeFragment(); 
     FragmentManager FM = getSupportFragmentManager(); 
     FM 
       .beginTransaction() 
       .replace(R.id.container_layout, home) 
       .commit(); 

     SharedPreferences prefs = getApplicationContext().getSharedPreferences("HouseKeepingtg", Context.MODE_PRIVATE); 

     String username = prefs.getString("fName", null); 
     String email = prefs.getString("Email", null); 
     String profilepic = prefs.getString("Profilepic", null); 
     nav_username.setText(username); 
     nav_emailuser.setText(email); 
     if (profilepic != null) 
      nav_profilepic.setImageBitmap(decodeBase64(profilepic)); 

     Log.v("UserData", username + email); 


    } 

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

    @Override 
    public void onConfigurationChanged(Configuration newConfig) { 
     super.onConfigurationChanged(newConfig); 
     // Pass any configuration change to the drawer toggles 
     drawerToggle.onConfigurationChanged(newConfig); 
    } 

    private ActionBarDrawerToggle setupDrawerToggle() { 
     return new ActionBarDrawerToggle(this, mDrawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); 
    } 

    private void setupDrawerContent(NavigationView navigationView) { 
     navigationView.setNavigationItemSelectedListener(
       new NavigationView.OnNavigationItemSelectedListener() { 
        @Override 
        public boolean onNavigationItemSelected(MenuItem menuItem) { 
         selectDrawerItem(menuItem); 
         return true; 
        } 
       }); 
    } 

    public void selectDrawerItem(MenuItem menuItem) { 
     Handler handler = new Handler(); 
     // Create a new fragment and specify the fragment to show based on nav item clicked 
     Fragment fragment = null; 
     Class fragmentClass; 
     switch (menuItem.getItemId()) { 
      case R.id.nav_display_worker_list: 
       fragmentClass = DisplayWorkersActivity.class; 
       break; 
      case R.id.nav_map: 
       fragmentClass = MapsActivity.class; 
       break; 
      case R.id.nav_home: 
       fragmentClass = HomeFragment.class; 
      case R.id.nav_settings: 
       fragmentClass = SettingsFragment.class; 
       break; 
//   case R.id.nav_update_profile: 
//     Intent intent = new Intent(BaseActivity.this, SignupRetailer.class); 
//     startActivity(intent); 
// 
//    break; 
      default: 
       fragmentClass = HomeFragment.class; 
     } 

     try { 
      fragment = (Fragment) fragmentClass.newInstance(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

     // Insert the fragment by replacing any existing fragment 
     final FragmentManager fragmentManager = getSupportFragmentManager(); 
     final Fragment finalFragment = fragment; 
     handler.postDelayed(new Runnable() { 
      @Override 
      public void run() { 
       fragmentManager.beginTransaction().replace(R.id.container_layout, finalFragment).commit(); 

      } 

     }, 250); 


     // Highlight the selected item has been done by NavigationView 
     menuItem.setChecked(true); 
     // Set action bar title 
     setTitle(menuItem.getTitle()); 
     // Close the navigation drawer 
     mDrawer.closeDrawers(); 


    } 


    @Override 
    public void onBackPressed() { 
     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     if (drawer.isDrawerOpen(GravityCompat.START)) { 
      drawer.closeDrawer(GravityCompat.START); 
     } else { 
      super.onBackPressed(); 
     } 
    } 

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

// @Override 
// public boolean onOptionsItemSelected(MenuItem item) { 
//  // Handle action bar item clicks here. The action bar will 
//  // automatically handle clicks on the Home/Up button, so long 
//  // as you specify a parent activity in AndroidManifest.xml. 
//  int id = item.getItemId(); 
// 
//  //noinspection SimplifiableIfStatement 
//  if (id == R.id.action_settings) { 
//   return true; 
//  } 
// 
//  return super.onOptionsItemSelected(item); 
// } 

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


    public static Bitmap decodeBase64(String input) { 
     byte[] decodedBytes = Base64.decode(input, 0); 
     return BitmapFactory.decodeByteArray(decodedBytes, 0, decodedBytes.length); 
    } 


    public void clearStack() { 
/* 
* Here we are clearing back stack fragment entries 
*/ 
     int backStackEntry = getSupportFragmentManager().getBackStackEntryCount(); 

     if (backStackEntry > 0) { 
      for (int i = 0; i < backStackEntry; i++) { 
       getSupportFragmentManager().popBackStackImmediate(); 
      } 
     } 

/* 
* Here we are removing all the fragment that are shown here 
*/ 
     if (getSupportFragmentManager().getFragments() != null && getSupportFragmentManager().getFragments().size() > 0) { 
      for (int i = 0; i < getSupportFragmentManager().getFragments().size(); i++) { 
       Fragment mFragment = getSupportFragmentManager().getFragments().get(i); 
       if (mFragment != null) { 
        getSupportFragmentManager().beginTransaction().remove(mFragment).commit(); 
       } 
      } 
     } 
    } 


} 
+0

是'String profilepic = prefs.getString(“Profilepic”,null)的值;'在运行时有效吗? – Chisko

+0

@Chisko是的,它是全部有效的,唯一的问题是imageView出现在工具栏 – Tayyaba

回答

0

虽然工具栏是一个ViewGroup中,您不需要像XML中的布局一样添加子视图。你要么

  • 添加特定的XML属性实际的工具栏,像android.support.v7.appcompat:logo和其他

  • 使用代码来添加视图它,就像setLogo()和其他工具栏的功能。

您可以在文档中阅读全部内容。

+0

但setLogo()没有集中的标志,我希望它在酒吧中间 – Tayyaba

+0

你可以尝试ViewGroup的'addView'方法,但它可能会弄乱整个工具栏。你也可以使用工具栏的ContentInsets,有很多功能。如果您需要,您可以跳过工具栏,并创建一个模仿您需要的工具栏功能的视图。 – lionscribe

+0

是的,我想到了,但它会有导航抽屉功能? – Tayyaba