2016-04-29 7 views
0

Ich habe meine Anwendung mit Navigation Drawer erstellt. Ich In meiner Tätigkeit setzen diesen Code:Wie setze ich dieses Element in die Symbolleiste?

public class MenuActivity extends AppCompatActivity 
    implements NavigationView.OnNavigationItemSelectedListener 
{ 

protected void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_menu); 
    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) 
    { 
     public void onDrawerOpened(View view) 
     { 
      super.onDrawerOpened(view); 
     } 
     public void onDrawerClosed(View v) 
     { 
      super.onDrawerClosed(v); 
     } 
    }; 
    drawer.setDrawerListener(toggle); 
    toggle.syncState(); 

    NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); 
    onNavigationItemSelected(navigationView.getMenu().getItem(0)); 
    navigationView.setNavigationItemSelectedListener(this); 
} 

public boolean onCreateOptionsMenu(Menu menu) { 

    getMenuInflater().inflate(R.menu.menu, menu); 
    return true; 
} 

public boolean onOptionsItemSelected(MenuItem item) 
{ 
    int id = item.getItemId(); 

    if (id == R.id.action_settings) 
    { 
     return true; 
    } 

    return super.onOptionsItemSelected(item); 
} 


public boolean onNavigationItemSelected(MenuItem item) { 

    Fragment fragment = null; 
    String title = null; 
    int id = item.getItemId(); 
    Class fragmentClass=null; 

    if (id == R.id.Home) 
    { 
     fragmentClass = HomeFragment.class; 
     title="Home"; 

    } 
    else if (id == R.id.Profile) 
    { 
     fragmentClass= ProfileFragment.class; 
     title="Profile"; 
    } 
    try { 
     fragment = (Fragment) fragmentClass.newInstance(); 
    } catch (InstantiationException e) { 

     e.printStackTrace(); 
    } catch (IllegalAccessException e) { 
     e.printStackTrace(); 
    } 


    FragmentManager fragmentManager = getSupportFragmentManager(); 
    fragmentManager.beginTransaction().replace(R.id.content_frame,  fragment).commit(); 


    if (getSupportActionBar() != null) 
    { 
     getSupportActionBar().setTitle(title); 
    } 

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


    return true; 
} 

jetzt in der HomeFragment ich eine Registerkarte im unteren Bereich des Bildschirms platzieren wollen. Also habe ich diesen Code:

public class HomeFragment extends Fragment { 


public static TabLayout tabLayout; 
public static ViewPager viewPager; 
public static int int_items = 3 ; 

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

} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

    View inflatedView = inflater.inflate(R.layout.fragment_home, null); 


    tabLayout = (TabLayout) inflatedView.findViewById(R.id.tabs); 
    viewPager = (ViewPager) inflatedView.findViewById(R.id.viewpager); 


    viewPager.setAdapter(new MyAdapter(getChildFragmentManager())); 


    tabLayout.post(new Runnable() { 
     @Override 
     public void run() { 
      tabLayout.setupWithViewPager(viewPager); 
     } 
    }); 

    return inflatedView; 

} 

class MyAdapter extends FragmentPagerAdapter { 

    public MyAdapter(FragmentManager fm) { 
     super(fm); 
    } 

    /** 
    * Return fragment with respect to Position . 
    */ 

    @Override 
    public Fragment getItem(int position) 
    { 
     switch (position){ 
      case 0 : return new SearchFragment(); 
      case 1 : return new CardFragment(); 
      case 2 : return new MapFragment(); 
     } 
     return null; 
    } 

    public int getCount() { 

     return int_items; 

    } 

Aber schließlich erhalte ich dieses Ergebnis:

enter image description here

Ich möchte, dies zu tun:

  1. setzen diese tablayout in der Symbolleiste
  2. Setzen Sie diese in den Boden der Bildschirm

Wie könnte ich es tun?

Antwort

1

Wenn Sie die TabLayout am unteren Rand des Bildschirms möchten, müssen Sie es nicht tatsächlich in der Symbolleiste platzieren. Wenn es für dieses Fragment spezifisch ist, sollte es dort bleiben. In Ihrem Layout versuchen dies zu tun:

<android.support.design.widget.TabLayout 
     android:layout_height="wrap_content" 
     android:layout_width="match_parent" 
     android:layout_gravity="bottom"> 

    </android.support.design.widget.TabLayout> 

Je nach Behälter Eltern, die funktionieren sollte, dann ist es einfach an der ViewPager Haken Sie erstellen die einzelnen Registerkarten zu behandeln. Wenn es ein RelativeLayout ist, verwenden Sie alignParentBottom statt layout_gravity.

Auch wenn Sie es wollen, wie verschwinden, es wäre, wenn Sie auf andere Anwendungen blättern, können Sie immer noch app:layout_anchor="@id/items_list" und app:layout_anchorGravity="bottom" dann das Verhalten anhängen, um es auf Blättern schieben raus. Es erfordert es eigentlich nicht in einem AppBarLayout zu sein.

Entfernen Sie auch die Polsterung/Rand von Ihrer Basisansicht.