2015-09-27 5 views
5

मेरे पास टूलबार के रूप में एक निचला मेनू है और मुझे शीर्ष पर एक एक्शनबार के रूप में जोड़ने की आवश्यकता है। यहाँ गतिविधिएंड्रॉइड एक ही गतिविधि में दो टूलबार जोड़ें?

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 कोड है और यहाँ इस गतिविधि mytoolbar के लिए एक्सएमएल नीचे टूलबार है:

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

और मैनिफ़ेस्ट फ़ाइल में मैं एंड्रॉयड जोड़ने था: uiOptions = "splitActionBarWhenNarrow" मैं इस छवि के रूप में शीर्ष पर मेनू कैसे जोड़ सकता हूं?

enter image description here

उत्तर

3

निम्नलिखित ट्यूटोरियल Using the Android Toolbar (ActionBar) - Tutorial

इसके अलावा, अगर आप दो अलग अलग टूलबार करना चाहते हैं तो आपके पास दो टूलबार उपयोग कर सकते हैं, बस layout_gravity इन दोनों उपकरण पट्टियों को अलग ढंग से की, एक सेट शीर्ष के लिए और अन्य नीचे निम्नानुसार हैं:

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

टूलबार दोनों के लिए अलग-अलग मेनू को बढ़ाने के लिए यह Using two toolbars with multiple menus भी पढ़ें।

8

मुझे एक समान आवश्यकता थी, केवल अंतर यह था कि मैं शीर्ष पर एक टूलबार चाहता था, और नीचे एक प्रकार की एक्शन बार चाहता था।

toobar, एक शीर्षक, कुछ बटन, और संभवतः एक कार्रवाई अतिप्रवाह के साथ सामग्री अनुरूप होने के लिए, था, जबकि निचले बार कुछ समान रूप से स्थान दिया गया, हमेशा दिखाई बटन, और कुछ नहीं शामिल करने के लिए किया था।

मेरा कार्यान्वयन एंड्रॉइड 4.x और एंड्रॉइड 5.x दोनों पर चलता है, परीक्षण और काम करता है।

यहां लेआउट है; जैसा कि आप देख सकते हैं, मैं नीचे पट्टी के लिए टूलबार का उपयोग कर रहा है, लेकिन एक ActionMenuView है, जो एक निचले स्तर विजेट है, कि टूलबार स्वयं आंतरिक रूप से उपयोग करता है:

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

यहाँ नीचे पट्टी के लिए मेनू है, कुछ भी नहीं अलग, एक नियमित रूप से उपकरण पट्टी मेनू की तुलना में:

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

और यहाँ मेरी गतिविधि कि AppCompatActivity से निकला में कोड है, जैसा कि आप देख सकते हैं कि मैं नीचे बार बार को बढ़ाने और आरंभ करने के लिए शीर्ष टूलबार के क्रिएटऑप्शनमेनू कॉलबैक का भी फायदा उठाता हूं। दुर्भाग्यवश, निचले बार मेनू आइटम के श्रोताओं को व्यक्तिगत रूप से सेट करने की आवश्यकता है। लेकिन वे शीर्ष टूलबार के साथ एक ही onOptionsItemSelected साझा कर सकते हैं:

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

स्क्रीनशॉट:

enter image description here

मुझे यकीन है कि यह पूरी तरह से एक रूढ़िवादी कार्यान्वयन है नहीं हूँ, लेकिन मुझे आशा है कि यह करने के लिए उपयोगी हो सकता है कोई व्यक्ति।

+0

आप समान रूप से प्रदर्शित करने के लिए आइकन कैसे प्राप्त करते हैं? शोएएसएक्शन हमेशा होने के बावजूद, जब मैं इसका उपयोग करता हूं तो विकल्प ओवरफ्लो मेनू में दिखाई देते हैं। –

+0

कोई बात नहीं, ऐसा प्रतीत होता है कि आपको संदर्भ के साथ एक बनाने के बजाय getMenuInflator का उपयोग करने की आवश्यकता है। –

संबंधित मुद्दे