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!