2015-09-27 17 views
5

Araç çubuğu olarak bir alt menüm var ve bir eylem çubuğu olarak başka bir tane eklemem gerekiyor. uiOptions = "splitActionBarWhenNarrow": Burada aktiviteandroid aynı aktivitede iki araç çubuğu ekleyin?

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); 
       } 
      } 
      } 
     } 
    } 
} 

ofthe kodudur ve burada bu etkinlik mytoolbar için xml alt araç çubuğu olduğunu:

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

ve manifest dosyasında ben android ekledin

Bu görüntüye nasıl bir menü ekleyebilirim?

enter image description here

cevap

3

sadece üst çıkartmak için farklı bu iki araç çubuklarının layout_gravity, dizilmesiyle aşağıdaki öğretici Ayrıca Using the Android Toolbar (ActionBar) - Tutorial

iki farklı araç çubukları yapmak istiyorsanız iki araç çubuklarını kullanabilirsiniz gör ve diğer aşağıdaki gibi alt aşağıdaki gibidir:

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

Ayrıca, araç çubukları için farklı menüler şişirmek için bu Using two toolbars with multiple menus'u okuyun.

8

Benzer bir gereksinime de sahip oldum, tek fark, üstte bir araç çubuğu ve altta bir tür eylem çubuğu olmasını istediğim. Alt çubuk bazı eşit aralıklı, her zaman görünür düğmeleri ve başka bir şey içeren vardı

toobar

, bir başlık, bir düğme ve muhtemelen bir aksiyon taşma ile, malzeme uyumlu olması gerekiyordu.

Uygulamam, Android 4.x ve Android 5.x sürümlerini izler, test eder ve çalışır.

Düzen burada; Gördüğünüz gibi Çubuğu kendisi içten kullandığı, ben alt çubuğu için Araç Çubuğu kullanılarak değilim, ama bir alt düzey widget bir ActionMenuView: Burada

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

alt çubuğu için menü; Düzenli araç çubuğu menüsünden kıyasla farklı bir şey: Burada

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

Ve AppCompatActivity türemiş Etkinliğime, içinde kod; Gördüğünüz gibi, alt çubuğun da şişirilmesi ve başlatılması için üst araç çubuğunun onCreateOptionsMenu geri çağrısını kullanıyorum. Ne yazık ki, alt çubuk menü öğeleri için dinleyicilerin tek tek ayarlanması gerekiyor. Ama üst araç çubuğu ile aynı onOptionsItemSelected paylaşabilirsiniz:

@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; 
} 

bir ekran görüntüsü:

enter image description here

Bu tamamen Ortodoks uygulamasıdır emin değilim, ama yararlı olabilir umut birisi.

+0

Simgeleri eşit olarak görüntülenmesini nasıl sağlarsınız? Hepsini kullandığımda, showAsAction her zaman olmasına rağmen, seçenekler bir taşma menüsünde görünür. –

+0

Unutmayın, bağlam ile bir tane oluşturmak yerine, getMenuInflator'ı kullanmanız gerektiği görülüyor. –