2015-09-27 27 views
5

Mam dolne menu jako pasek narzędzi i muszę dodać kolejny na górze jako pasek akcji. Oto kod ofthe aktywnościAndroid dodać dwa paski narzędzi w tej samej czynności?

public class ListViewPharms extends AppCompatActivity { 
public Toolbar mToolbar; 
ListView mListView; 
SimpleAdapter pharmAdapter; 
LinearLayout searchsec; 
// Search EditText 
EditText inputSearch; 


@Override 
public void onCreate(Bundle savedInstanceState) { 
    requestWindowFeature(Window.FEATURE_CUSTOM_TITLE); 

    super.onCreate(savedInstanceState); 

    setContentView(R.layout.activity_action_bar); 

    getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.activity_list_view_pharms_title); 



    Toolbar toolbar = (Toolbar) findViewById(R.id.mytoolbar); 
    setSupportActionBar(toolbar); 
    getSupportActionBar().setDisplayShowTitleEnabled(false); 
    setupEvenlyDistributedToolbar(); 



    inputSearch = (EditText) findViewById(R.id.search_bar); 

    inputSearch.addTextChangedListener(new TextWatcher() { 

     @Override 
     public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) { 
      // When user changed the Text 
      ListViewPharms.this.pharmAdapter.getFilter().filter(cs); 
     } 

     @Override 
     public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, 
             int arg3) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void afterTextChanged(Editable arg0) { 
      // TODO Auto-generated method stub 
     } 
    }); 


} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 


    MenuInflater inflater = getMenuInflater(); 

    inflater.inflate(R.menu.menu_register, menu); 

    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
     case R.id.action_home: 
      Intent intent = new Intent(this, ListViewPharms.class); 
      startActivity(intent); 
      break; 
     case R.id.action_cont: 
      item.setIcon(getResources().getDrawable(R.drawable.icon2_active)); 

      Intent intent2 = new Intent(this, Contribute.class); 
      startActivity(intent2); 
      break; 
     case R.id.action_info: 
      Intent intent3 = new Intent(this, info.class); 
      startActivity(intent3); 
      break; 
     case R.id.action_settings: 
      Intent intent4 = new Intent(this, contactInfo.class); 
      startActivity(intent4); 
      break; 
    } 
    return true; 
} 


/** 
* This method will take however many items you have in your 
* menu/menu_main.xml and distribute them across your devices screen 
* evenly using a Toolbar. Enjoy!! 
*/ 
public void setupEvenlyDistributedToolbar(){ 
    // Use Display metrics to get Screen Dimensions 
    Display display = getWindowManager().getDefaultDisplay(); 
    DisplayMetrics metrics = new DisplayMetrics(); 
    display.getMetrics(metrics); 

    // Toolbar 
    mToolbar = (Toolbar) findViewById(R.id.mytoolbar); 
    // Inflate your menu 
    mToolbar.inflateMenu(R.menu.menu_register); 

    // Add 10 spacing on either side of the toolbar 
    mToolbar.setContentInsetsAbsolute(4, 4); 

    // Get the ChildCount of your Toolbar, this should only be 1 
    int childCount = mToolbar.getChildCount(); 
    // Get the Screen Width in pixels 
    int screenWidth = metrics.widthPixels; 

    // Create the Toolbar Params based on the screenWidth 
    Toolbar.LayoutParams toolbarParams = new Toolbar.LayoutParams(screenWidth, ViewGroup.LayoutParams.WRAP_CONTENT); 

    // Loop through the child Items 
    for(int i = 0; i < childCount; i++){ 
     // Get the item at the current index 
     View childView = mToolbar.getChildAt(i); 
     // If its a ViewGroup 
     if(childView instanceof ViewGroup){ 
      // Set its layout params 
      childView.setLayoutParams(toolbarParams); 
      // Get the child count of this view group, and compute the item widths based on this count & screen size 
      int innerChildCount = ((ViewGroup) childView).getChildCount(); 
      int itemWidth = (screenWidth/innerChildCount); 
      // Create layout params for the ActionMenuView 
      ActionMenuView.LayoutParams params = new ActionMenuView.LayoutParams(itemWidth, ViewGroup.LayoutParams.WRAP_CONTENT); 
      // Loop through the children 
      for(int j = 0; j < innerChildCount; j++){ 
       View grandChild = ((ViewGroup) childView).getChildAt(j); 
       if(grandChild instanceof ActionMenuItemView){ 
        // set the layout parameters on each View 
        grandChild.setLayoutParams(params); 
       } 
      } 
      } 
     } 
    } 
} 

i tutaj jest xml dla tej działalności mytoolbar jest dolny pasek narzędzi:

<RelativeLayout 
    android:id="@+id/pharms_list" 
    android:layout_height="fill_parent" 
    android:layout_width="fill_parent" 
    android:orientation="vertical" 
    android:layout_above="@+id/mytoolbar"> 

    <ListView 
     android:id="@+id/list" 
     android:layout_width="fill_parent" 
     android:layout_height="match_parent" 
     android:layout_weight="1" 

     android:drawSelectorOnTop="false" 
     android:layout_below="@+id/first_sec" 
     android:layout_alignParentEnd="true" /> 
</RelativeLayout> 

<android.support.v7.widget.Toolbar 
    android:id="@+id/mytoolbar" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_alignParentBottom="true" 
    android:background="@drawable/linesup" 
    app:contentInsetLeft="10dp" 
    app:contentInsetRight="10dp" 
    app:contentInsetStart="10dp" 
    > 
</android.support.v7.widget.Toolbar> 

w pliku manifestu zrobiłem dodać androida: uiOptions = „splitActionBarWhenNarrow” jak mogę dodać menu do góry jako ten obraz?

enter image description here

Odpowiedz

3

Patrz poniższy poradnik Using the Android Toolbar (ActionBar) - Tutorial

Ponadto można korzystać z dwóch pasków narzędzi, jeśli chcesz mieć dwa różne paski narzędzi, wystarczy ustawić layout_gravity obu tych pasków inaczej jeden mieć górną i drugi mają dolną w następujący sposób:

<android.support.design.widget.CoordinatorLayout 
    android:id="@+id/coordinator" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 



    <!-- As the main content view, the view below consumes the entire 
     space available using match_parent in both dimensions. --> 
    <FrameLayout android:id="@+id/container" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:background="@color/circle_blue"/> 


    <android.support.v7.widget.Toolbar 
     android:id="@+id/toolbar" 
     android:layout_width="match_parent" 
     android:layout_height="?attr/actionBarSize" 
     android:layout_margin="8dp" 
     android:background="@drawable/curved_div_shadow" 
     android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" 
     app:popupTheme="@style/ThemeOverlay.AppCompat.Light" 
     app:layout_scrollFlags="scroll|enterAlways"> 

    </android.support.v7.widget.Toolbar> 

    <android.support.v7.widget.Toolbar 
     android:id="@+id/toolbar2" 
     android:layout_width="match_parent" 
     android:layout_height="?attr/actionBarSize" 
     android:layout_margin="8dp" 
     android:layout_gravity="bottom" 
     android:background="@drawable/curved_div_shadow" 
     android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" 
     app:popupTheme="@style/ThemeOverlay.AppCompat.Light" 
     app:layout_scrollFlags="scroll|enterAlways"> 

    </android.support.v7.widget.Toolbar> 

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

Przeczytaj także tę Using two toolbars with multiple menus, aby nadmuchać różne menu dla obu pasków narzędzi.

8

Miałem podobną potrzebę, a jedyną różnicą było to, że chciałem mieć pasek narzędzi na górze i rodzaj paska akcji na dole.

Toobar musi być materiał zgodny z tytułu, niektóre przyciski i ewentualnie przepełnienie działania, a dolna belka musiał zawierać pewną równomiernie rozmieszczonych zawsze widoczny przycisk i nic innego.

Moja implementacja jest zgodna, testowana i działa, zarówno na Androidzie 4.x, jak i na systemie Android 5.x.

Oto układ; jak widać, nie używam pasek na dolnym pasku, ale ActionMenuView, który jest widget niższego poziomu, że sama Toolbar używa wewnętrznie:

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

    <android.support.v7.widget.Toolbar 
     android:id="@+id/page_toolbar" 
     android:layout_width="match_parent" 
     android:layout_height="?attr/actionBarSize" 
     android:layout_alignParentTop="true" 
     android:background="?attr/colorPrimary" 
     android:elevation="4dp"/> 

    <android.support.v7.widget.ActionMenuView 
     android:id="@+id/bottom_toolbar" 
     android:layout_width="match_parent" 
     android:layout_height="?attr/actionBarSize" 
     android:layout_alignParentBottom="true" 
     android:background="?attr/colorPrimary" 
     android:elevation="4dp" /> 

    <WebView 
     android:id="@+id/page" 
     android:layout_below="@id/page_toolbar" 
     android:layout_above="@id/bottom_toolbar" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 

</RelativeLayout> 

Oto menu na dolnym pasku; nic innego, niż zwykłe menu paska narzędzi:

<?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"> 

    <item 
     android:id="@+id/action_list" 
     android:icon="@drawable/ic_list" 
     android:title="@string/action_list" 
     app:showAsAction="always"/> 

    <!-- several more items here... --> 

</menu> 

A oto kod w mojej działalności, który wywodzi się z AppCompatActivity; jak widać, wykorzystuję wywołanie zwrotne onCreateOptionsMenu na górnym pasku narzędzi, aby również nadmuchać i zainicjować dolny pasek. Niestety, słuchacze menu dolnego paska muszą być ustawione indywidualnie. Ale mogą dzielić ten sam onOptionsItemSelected z górnego paska narzędzi:

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the toolbar menu 
    getMenuInflater().inflate(R.menu.web_page_menu, menu); 

    // Inflate and initialize the bottom menu 
    ActionMenuView bottomBar = (ActionMenuView)findViewById(R.id.bottom_toolbar); 
    Menu bottomMenu = bottomBar.getMenu(); 
    getMenuInflater().inflate(R.menu.obj_menu, bottomMenu); 
    for (int i = 0; i < bottomMenu.size(); i++) { 
     bottomMenu.getItem(i).setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { 
      @Override 
      public boolean onMenuItemClick(MenuItem item) { 
       return onOptionsItemSelected(item); 
      } 
     }); 
    } 

    return true; 
} 

Zrzut ekranu:

enter image description here

nie jestem pewien, że to jest całkowicie ortodoksyjny wdrożenie, ale mam nadzieję, że może to być przydatne do ktoś.

+0

Jak uzyskać równomierne wyświetlanie ikon? Gdy go używam, wszystkie opcje pojawiają się w menu przepełnienia, mimo że zawsze jest wyświetlana opcja showAsAction. –

+0

Nieważne, wydaje się, że musisz użyć getMenuInflator zamiast tworzyć go z kontekstem. –