2016-04-19 4 views
0

Ich habe ein Schubladenlayout, das zwei Navigationsansichten enthalten muss, da es mehrere Optionen gibt, die oben und unten auf einer Trennwand angeordnet werden müssen trennt sie.Schubladenlayout mit zwei Navigationsansichten und ausgewählten Objektfarben

Ich habe es geschafft, es funktioniert, aber jetzt habe ich zwei verschiedene Probleme mit meinem Setup.

1) Die erste, ich kann nicht die ausgewählten Elemente Textfarbe ändern (die Hintergrundfarbe arbeitet als über eine Schublade Selektor intented, aber aus irgendeinem Grund, die Textfarbe des ausgewählten Elements ist immer colorPrimary)

2) Die zweite ist kniffliger, da es zwei Navigationsansichten gibt, kann es vorkommen, dass eine ausgewählte Zeile auf der ersten und auf der zweiten liegt, obwohl alle die Ladefragmente in demselben Container bearbeiten. Gibt es eine Möglichkeit, das zu verwalten, wenn ein Element für die erste Navigationsansicht ausgewählt wird, wird das ausgewählte Element der zweiten Navigationsansicht abgewählt?

Dies ist das Layout der Schublade:

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v4.widget.DrawerLayout 
    android:id="@+id/drawer_layout" 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_height="match_parent" 
    android:layout_width="match_parent" 
    xmlns:app="http://schemas.android.com/apk/res-auto"> 



    <!-- 1º Layout de la activity --> 
    <include layout="@layout/activity_main"/> 

    <!-- 2º Layout del drawer --> 

    <android.support.design.widget.NavigationView 
     android:id="@+id/container_navigation" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:layout_gravity="start" 
     app:itemBackground="@drawable/drawer_list_selector" 
     android:nestedScrollingEnabled="true" 
     android:scrollIndicators="none"> 

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

      <View 
       android:layout_width="match_parent" 
       android:layout_height="@dimen/divider_height" 
       android:background="@color/colorAccent" 
       android:layout_above="@+id/navigation_view" 
       android:id="@+id/top_separator"/> 

      <android.support.design.widget.NavigationView 
       android:id="@+id/navigation_view" 
       android:layout_width="wrap_content" 
       android:layout_height="match_parent" 
       android:layout_gravity="start" 
       android:layout_above="@+id/bottom_separator" 
       app:itemBackground="@drawable/drawer_list_selector" 
       app:menu="@menu/menu_navigation" /> 

      <View 
       android:layout_width="match_parent" 
       android:layout_height="@dimen/divider_height" 
       android:background="@color/colorAccent" 
       android:layout_above="@+id/navigation_bottom" 
       android:id="@+id/bottom_separator"/> 
      <android.support.design.widget.NavigationView 
       android:id="@+id/navigation_bottom" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       app:menu="@menu/menu_navigation_bottom" 
       app:itemBackground="@drawable/drawer_list_selector" 
       android:layout_alignParentBottom="true"/> 
     </RelativeLayout> 
    </android.support.design.widget.NavigationView> 
</android.support.v4.widget.DrawerLayout> 

Dies ist die Top-Layout der Navigationsansicht:

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto"> 

     <group android:checkableBehavior="single"> 
      <item 
       android:id="@+id/nav_tus_ofertas" 
       android:title="@string/tus_ofertas" 
       android:icon="@drawable/ic_offer" /> 

      <item 
       android:id="@+id/nav_movimiento_puntos" 
       android:title="@string/movimiento_puntos" 
       android:icon="@drawable/ic_points"/> 

      <item 
       android:id="@+id/nav_asociaciones" 
       android:title="@string/asociaciones" 
       android:icon="@drawable/ic_flag"/> 

     </group> 
</menu> 

Bottom Navigationsansicht des Layout:

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android"> 
    <group android:checkableBehavior="single"> 
     <item 
      android:id="@+id/nav_terminos" 
      android:title="@string/terminos" 
      android:icon="@drawable/ic_document" /> 

     <item 
      android:id="@+id/nav_contacto" 
      android:title="@string/contacto" 
      android:icon="@drawable/ic_email"/> 
     <item 
      android:id="@+id/nav_valorar" 
      android:title="@string/valorar" 
      android:icon="@drawable/ic_rate_review"/> 
     <item 
      android:id="@+id/nav_exit" 
      android:title="@string/exit" 
      android:icon="@drawable/ic_shutdown"/> 
    </group> 
</menu> 

Hintergrund Selektor des Gewählter Punkt:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_pressed="true" android:drawable="@color/colorAccent" /> 
    <item android:state_activated="true" android:drawable="@color/colorAccent" /> 
    <item android:state_selected="true" android:drawable="@color/colorAccent" /> 
    <item android:state_checked="true" android:drawable="@color/colorAccent" /> 
    <item android:state_pressed="false" android:drawable="@android:color/transparent" /> 
    <item android:state_activated="false" android:drawable="@android:color/transparent" /> 
    <item android:state_selected="false" android:drawable="@android:color/transparent" /> 
    <item android:state_checked="false" android:drawable="@android:color/transparent" /> 
</selector> 

Die Aktivität, die die Schublade und behandelt die Ereignisse ruft:

public class MainActivity extends AppCompatActivity { 

    @Bind(R.id.toolbar) Toolbar toolbar; 
    @Bind(R.id.tabs) TabLayout tabs; 
    @Bind(R.id.drawer_layout) DrawerLayout drawerLayout; 
    @Bind(R.id.container_navigation) NavigationView containerNavigator; 
    @Bind(R.id.navigation_view) NavigationView navigationView; 
    @Bind(R.id.navigation_bottom) NavigationView navigationBottom; 
    @Bind(R.id.vsFooter) ViewStubCompat stub; 

    ImageView userPicture; 
    TextView userMail; 

    ViewPager viewPager; 
    Menu menu; 
    ActionBar actionBar; 
    ViewPagerFragment viewPagerFragment; 
    Usuario currentUser; 

    public Usuario getCurrentUser() { 
     return currentUser; 
    } 

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

     ButterKnife.bind(this); 
     currentUser = UserApiManager.getInstance(getApplicationContext()).getCurrentUser(); 

     viewPagerFragment = ViewPagerFragment.newInstance(); 
     setupToolbar(); 
     setupNavigationDrawer(); 

     ApiManager.getInstance(getApplicationContext()).setupFooter(stub, currentUser.getIdLocalidad(), this); 
     getSupportFragmentManager().beginTransaction().replace(R.id.frame_layout,viewPagerFragment).commit(); 

    } 

    public void setupViewPager(ViewPager viewPager) { 
     tabs.setupWithViewPager(viewPager); 
    } 

    private void setupToolbar() { 

     setSupportActionBar(toolbar); 
     actionBar = getSupportActionBar(); 
     if (actionBar!=null){ 
      actionBar.setDisplayHomeAsUpEnabled(true); 
      actionBar.setHomeAsUpIndicator(R.drawable.ic_menu_black); 
      actionBar.setTitle(getString(R.string.app_title)); 

     } 
    } 

    private void setupNavigationDrawer() { 

     View headerView = navigationView.inflateHeaderView(R.layout.navigation_header); 
     userPicture = (ImageView) headerView.findViewById(R.id.user_picture); 
     userMail = (TextView) headerView.findViewById(R.id.user_mail); 

     userMail.setText(currentUser.getEmail()); 
     Picasso.with(this).load(currentUser.getImagenURL()).transform(new CircleTransformation()).into(userPicture); 
     navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() { 
      @Override 
      public boolean onNavigationItemSelected(MenuItem item) { 
       switch (item.getItemId()) { 
        case R.id.nav_tus_ofertas: 
         showTabLayout(); 
         actionBar.setTitle(getString(R.string.app_title)); 
         getSupportFragmentManager().beginTransaction().replace(R.id.frame_layout,viewPagerFragment).commit(); 
         break; 
        case R.id.nav_movimiento_puntos: 
         hideTabLayout(); 
         Bundle bundle = new Bundle(); 
         bundle.putString("idcliente", currentUser.getId()); 
         MovimientoPuntosFragment movimientoPuntosFragment = MovimientoPuntosFragment.newInstance(); 
         movimientoPuntosFragment.setArguments(bundle); 
         actionBar.setTitle(getString(R.string.movimiento_puntos)); 
         getSupportFragmentManager().beginTransaction().replace(R.id.frame_layout, movimientoPuntosFragment).commit(); 
         break; 
        case R.id.nav_asociaciones: 
         hideTabLayout(); 
         actionBar.setTitle(getString(R.string.asociaciones)); 
         getSupportFragmentManager().beginTransaction().replace(R.id.frame_layout, AsociacionFragment.newInstance()).commit(); 
         break; 
       } 
       drawerLayout.closeDrawers(); 
       return true; 
      } 
     }); 
     navigationBottom.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() { 
      @Override 
      public boolean onNavigationItemSelected(MenuItem item) { 
       switch (item.getItemId()) { 

        case R.id.nav_terminos: 
         hideTabLayout(); 
         actionBar.setTitle(getString(R.string.terminos)); 
         getSupportFragmentManager().beginTransaction().replace(R.id.frame_layout, LegalesFragment.newInstance()).commit(); 

         break; 
        case R.id.nav_contacto: 
         Intent intent = new Intent(Intent.ACTION_VIEW); 
         Uri data = Uri.parse("mailto:?subject=" + getString(R.string.contacto_email)); 
         intent.setData(data); 
         startActivity(intent); 
         break; 
        case R.id.nav_valorar: 
         final String appPackageName = BuildConfig.APPLICATION_ID; 
         try { 
          Log.i("url", "market://details?id=" + appPackageName); 
          startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + appPackageName))); 
         } catch (android.content.ActivityNotFoundException anfe) { 
          startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=" + appPackageName))); 
         } 
         break; 
        case R.id.nav_exit: 
         break; 
       } 
       drawerLayout.closeDrawers(); 
       return true; 
      } 

     }); 

    } 

     @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 

     getMenuInflater().inflate(R.menu.menu_over, menu); 
     this.menu = menu; 

     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 

     switch (item.getItemId()) { 
      case android.R.id.home: 
       drawerLayout.openDrawer(GravityCompat.START); 
       break; 
      case R.id.action_user: 
       Intent intent = new Intent(this, PerfilUsuarioActivity.class); 
       startActivity(intent); 
       break; 
     } 

     return super.onOptionsItemSelected(item); 
    } 

    public void hideTabLayout(){ 
     tabs.setVisibility(View.GONE); 

    } 

    public void showTabLayout(){ 
     tabs.setVisibility(View.VISIBLE); 
    } 


} 

Jede Hilfe wäre dankbar! Vielen Dank im Voraus!

Antwort

0

Gelöst! Das Problem mit der Farbe Ich löste es mit einem Selektor, es hat vorher nicht funktioniert, weil ich einen Syntaxfehler hatte (Selektor-Tag innerhalb des Haupt Selektor-Tags).

Dies ist der Code der Farbauswahl:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
     <item android:color="#FFFFFFFF" android:state_checked="true" /> 
     <item android:color="#E6000000" android:state_checked="false"/> 
</selector> 

Das zweite Problem, das ich es durch programmatisch die anderen navigationview Stücke Abwählen gelöst onNavigationItemSelected.

Dies ist die Funktion, die ich nennen:

public void deselectItems(NavigationView view){ 
    int size = view.getMenu().size(); 
    for (int i = 0; i < size; i++) { 
     view.getMenu().getItem(i).setChecked(false); 
    } 
} 

ich es wissen muss einen besseren Weg, um das zweite Problem zu lösen, aber dieses arbeitete.