2016-02-01 2 views
0

Когда я изменяю макет фрагмента внутри действия, параметры меню на панели действий, похоже, перестают работать. Кнопки (значок поиска и значок NavDrawer) перестают отвечать на запросы.ScrollView перекрывает ActionBar, предотвращает выбор кнопок

Это файл макета фрагмента с рабочими пунктами меню: activity_login.xml (рабочий)

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    xmlns:tools="http://schemas.android.com/tools" 
    tools:context=".LoginFragment" 
    xmlns:android="http://schemas.android.com/apk/res/android"> 
    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 

     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:textAppearance="?android:attr/textAppearanceLarge" 
      android:text="Login." 
      android:id="@+id/login_title_text" 
      android:layout_alignParentTop="true" 
      android:textSize="40sp" 
      android:layout_marginTop="100dp" 
      android:fontFamily="sans-serif-light" 
      android:textColor="@color/colorAlt" 
      android:layout_centerHorizontal="true" /> 

     <!-- E-mail section --> 
     <EditText 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:inputType="textEmailAddress" 
      android:hint="E-mail address" 
      android:layout_marginLeft="50dp" 
      android:layout_marginTop="10dp" 
      android:layout_marginRight="20dp" 
      android:ems="10" 
      android:id="@+id/login_emailField" 
      android:layout_above="@+id/login_passwordField" /> 
     <ImageView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:src="@drawable/register_email_icon" 
      android:layout_alignBottom="@id/login_emailField" 
      android:layout_marginLeft="15dp" 
      android:layout_marginBottom="10dp"/> 


     <!-- Password section --> 
     <ImageView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:src="@drawable/register_password_icon" 
      android:layout_alignBottom="@id/login_passwordField" 
      android:layout_marginLeft="15dp" 
      android:layout_marginBottom="10dp"/> 

     <EditText 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:inputType="textPassword" 
      android:layout_marginTop="10dp" 
      android:hint="Password" 
      android:id="@+id/login_passwordField" 
      android:layout_centerVertical="true" 
      android:layout_marginLeft="50dp" 
      android:layout_marginRight="20dp" 
      android:layout_marginBottom="25dp" /> 

     <android.support.v7.widget.CardView 
      xmlns:android="http://schemas.android.com/apk/res/android" 
      xmlns:card_view="http://schemas.android.com/apk/res-auto" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:id="@+id/login_login_button" 
      android:layout_gravity="center_vertical" 
      android:layout_below="@+id/login_passwordField" 
      android:layout_marginBottom="29dp" 
      android:layout_marginLeft="20dp" 
      android:layout_marginRight="20dp" 
      card_view:cardBackgroundColor="#E91E63" 
      card_view:cardCornerRadius="2dp" 
      card_view:cardElevation="6dp"> 

      <TextView 
       android:id="@+id/material_text" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:paddingTop="13dp" 
       android:paddingBottom="13dp" 
       android:layout_gravity="center_horizontal" 
       android:textColor="#FFF" 
       android:textSize="19sp" 
       android:fontFamily="sans-serif-medium" 
       android:text="Login" /> 
     </android.support.v7.widget.CardView> 



     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:textAppearance="?android:attr/textAppearanceMedium" 
      android:text="Forgotten your username or password?" 
      android:layout_below="@id/login_login_button" 
      android:gravity="center" 
      android:layout_centerHorizontal="true" 
      android:id="@+id/login_footer_text" 
      android:layout_marginTop="40dp"/> 
     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:textAppearance="?android:attr/textAppearanceMedium" 
      android:text="Tap here" 
      android:textColor="#000000" 
      android:layout_below="@id/login_footer_text" 
      android:gravity="center" 
      android:layout_centerHorizontal="true" 
      android:id="@+id/loginForgottenTapText" 
      android:layout_marginTop="20dp"/> 
    </RelativeLayout> 

</LinearLayout> 

Это файл макета, который, кажется, сломать кнопки: activity_login. XML (нерабочий)

<?xml version="1.0" encoding="utf-8"?> 
<ScrollView 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    xmlns:tools="http://schemas.android.com/tools" 
    tools:context=".LoginFragment" 
    xmlns:android="http://schemas.android.com/apk/res/android"> 
    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 

     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:textAppearance="?android:attr/textAppearanceLarge" 
      android:text="Login." 
      android:id="@+id/login_title_text" 
      android:layout_alignParentTop="true" 
      android:textSize="40sp" 
      android:layout_marginTop="100dp" 
      android:fontFamily="sans-serif-light" 
      android:textColor="@color/colorAlt" 
      android:layout_centerHorizontal="true" /> 

     <!-- E-mail section --> 
     <EditText 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:inputType="textEmailAddress" 
      android:hint="E-mail address" 
      android:layout_marginLeft="50dp" 
      android:layout_marginTop="10dp" 
      android:layout_marginRight="20dp" 
      android:ems="10" 
      android:id="@+id/login_emailField" 
      android:layout_below="@+id/login_title_text" /> 
     <ImageView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:src="@drawable/register_email_icon" 
      android:layout_alignBottom="@id/login_emailField" 
      android:layout_marginLeft="15dp" 
      android:layout_marginBottom="10dp"/> 


     <!-- Password section --> 

     <EditText 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:inputType="textPassword" 
      android:layout_marginTop="10dp" 
      android:hint="Password" 
      android:layout_below="@id/login_emailField" 
      android:id="@+id/login_passwordField" 
      android:layout_marginLeft="50dp" 
      android:layout_marginRight="20dp" 
      android:layout_marginBottom="25dp" /> 

     <ImageView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:src="@drawable/register_password_icon" 
      android:layout_alignBottom="@id/login_passwordField" 
      android:layout_marginLeft="15dp" 
      android:layout_marginBottom="10dp"/> 

     <android.support.v7.widget.CardView 
      xmlns:android="http://schemas.android.com/apk/res/android" 
      xmlns:card_view="http://schemas.android.com/apk/res-auto" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:id="@+id/login_login_button" 
      android:layout_gravity="center_vertical" 
      android:layout_below="@+id/login_passwordField" 
      android:layout_marginBottom="29dp" 
      android:layout_marginLeft="20dp" 
      android:layout_marginRight="20dp" 
      card_view:cardBackgroundColor="#E91E63" 
      card_view:cardCornerRadius="2dp" 
      card_view:cardElevation="6dp"> 

      <TextView 
       android:id="@+id/material_text" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:paddingTop="13dp" 
       android:paddingBottom="13dp" 
       android:layout_gravity="center_horizontal" 
       android:textColor="#FFF" 
       android:textSize="19sp" 
       android:fontFamily="sans-serif-medium" 
       android:text="Login" /> 
     </android.support.v7.widget.CardView> 



     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:textAppearance="?android:attr/textAppearanceMedium" 
      android:text="Forgotten your username or password?" 
      android:layout_below="@id/login_login_button" 
      android:gravity="center" 
      android:layout_centerHorizontal="true" 
      android:id="@+id/login_footer_text" 
      android:layout_marginTop="20dp"/> 
     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:textAppearance="?android:attr/textAppearanceMedium" 
      android:text="Tap here" 
      android:textColor="#000000" 
      android:layout_below="@id/login_footer_text" 
      android:gravity="center" 
      android:layout_centerHorizontal="true" 
      android:id="@+id/loginForgottenTapText" 
      android:layout_marginTop="10dp"/> 
    </RelativeLayout> 

</ScrollView> 

MainActivity.java

public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener, LoginFragment.OnLoginCallback { 

    MenuItem register; 
    MenuItem login; 
    MenuItem logout; 
    MenuItem completeListing; 
    MenuItem expiredListing; 
    MenuItem activeListing; 

    NavigationView navigationView; 
    UserCredentialHandler userStatus; 

    protected static final String KEY_USER_STATUS = "USER_STATUS"; 
    protected static final String USER_PREFS = "userNamePrefs"; 

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

     final HomeFragment homeFragment = new HomeFragment(); 

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

     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
       this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); 
     drawer.setDrawerListener(toggle); 
     toggle.syncState(); 


     FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
     fab.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       Intent i = new Intent(getApplicationContext(), CreateListingActivity.class); 
       startActivity(i); 
      } 
     }); 

     navigationView = (NavigationView) findViewById(R.id.nav_view); 
     navigationView.setNavigationItemSelectedListener(this); 

     getMenuItems(navigationView); 

     if(userStatus.checkIfUserIsLoggedIn(getApplicationContext())){ 
      userStatus.setNavHeaderOnLogin(getApplicationContext(), navigationView); 
      updateNavDrawer("login", register, login, logout, expiredListing, completeListing, activeListing); 
     } else { 
      userStatus.setNavHeaderOnLogout(navigationView); 
      updateNavDrawer("logout", register, login, logout, expiredListing, completeListing, activeListing); 
     } 

     FragmentManager fragmentManager = getSupportFragmentManager(); 
     FragmentTransaction fragmentTransaction = fragmentManager 
       .beginTransaction(); 
     fragmentTransaction.replace(R.id.main_container,homeFragment); 
     fragmentTransaction.commit(); 
    } 

    @Override 
    public void onLoginSuccess() { 
     HomeFragment homeFragment = new HomeFragment(); 
     userStatus.setNavHeaderOnLogin(getApplicationContext(), navigationView); 

     updateNavDrawer("login",register,login,logout, expiredListing, completeListing, activeListing); 

     register.setVisible(false); 
     login.setVisible(false); 
     logout.setVisible(true); 

     FragmentManager fragmentManager = getSupportFragmentManager(); 
     FragmentTransaction fragmentTransaction = fragmentManager 
       .beginTransaction(); 
     fragmentTransaction.replace(R.id.main_container,homeFragment); 
     fragmentTransaction.commit(); 
    } 


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

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main_activity_main, 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; 
     } else if (id == R.id.search_mag_icon){ 
      SearchFragment searchFragment = new SearchFragment(); 
      getSupportFragmentManager() 
        .beginTransaction() 
        .replace(R.id.main_container, searchFragment) 
        .addToBackStack(null) 
        .commit(); 
     } 
     return super.onOptionsItemSelected(item); 
    } 

    @SuppressWarnings("StatementWithEmptyBody") 
    @Override 
    public boolean onNavigationItemSelected(MenuItem item) { 
     // Handle navigation view item clicks here. 
     int id = item.getItemId(); 

     if (id == R.id.nav_register) { 
      final RegisterFragment registerFragment = new RegisterFragment(); 

      getSupportFragmentManager() 
        .beginTransaction() 
        .replace(R.id.main_container, registerFragment) 
        .addToBackStack(null) 
        .commit(); 

     } else if (id == R.id.nav_login) { 
      final LoginFragment loginFragment = new LoginFragment(); 
      getSupportFragmentManager() 
        .beginTransaction() 
        .replace(R.id.main_container, loginFragment) 
        .addToBackStack(null) 
        .commit(); 

     } else if(id == R.id.nav_logout) { 
      userStatus.logoutUser(getApplicationContext()); 
      userStatus.setNavHeaderOnLogout(navigationView); 
      updateNavDrawer("logout",register,login,logout, expiredListing, completeListing, activeListing); 

     } else if (id == R.id.nav_my_listings) { 
      // navigate to my listings 
     } else if (id == R.id.nav_how) { 
      // navigate to how it works page 
     } else if (id == R.id.nav_help) { 
      // navigate to help page 
     } else if (id == R.id.nav_contact_us) { 
      // navigate to contact page, 
     } 

     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     drawer.closeDrawer(GravityCompat.START); 
     return true; 
    } 

    private void updateNavDrawer(String action, MenuItem register, MenuItem login, MenuItem logout, MenuItem expiredListing, MenuItem completeListing, MenuItem activeListing){ 
     if(action=="login"){ 
      register.setVisible(false); 
      login.setVisible(false); 
      logout.setVisible(true); 
      completeListing.setVisible(true); 
      activeListing.setVisible(true); 
      expiredListing.setVisible(true); 
     } else { 
      register.setVisible(true); 
      login.setVisible(true); 
      logout.setVisible(false); 
      completeListing.setVisible(false); 
      activeListing.setVisible(false); 
      expiredListing.setVisible(false); 
     } 
    } 

    private void getMenuItems(NavigationView nv){ 
     register = nv.getMenu().getItem(0); 
     login = nv.getMenu().getItem(1); 
     logout = nv.getMenu().getItem(2); 
     activeListing = nv.getMenu().getItem(3); 
     completeListing = nv.getMenu().getItem(4); 
     expiredListing = nv.getMenu().getItem(5); 
    } 

} 

Я не могу тренировки, почему меняется расположение ломает пункты меню ActionBar, любая помощь будет оценена.

Edit: Изменение <ScrollView> элемента <LinearLayout>, кажется, решить, но мне нужно Scrollview. ScrollView, похоже, перекрывает ActionBar и находится сверху.

ответ

0

Попробуйте установить андроид: layout_height на ScrollView к "match_parent" вместо "wrap_content"

+0

не работает :( –

Смежные вопросы