2012-10-05 34 views
33

मैं इस तरह के किनारों पर केंद्र में लोगो और दो एक्शन आइटम रखने के लिए एक एक्शनबार कैसे बना सकता हूं?एक्शनबार लोगो केंद्रित और पक्षों पर एक्शन आइटम

enter image description here

मैं ActionBar शर्लक का उपयोग किया जाएगा।

उत्तर

39

जैसा कि मैंने एक टिप्पणी में नोट किया है, मुझे बिल्कुल यकीन नहीं है कि इनमें से कोई भी एबीएस के साथ बदल जाएगा (मुझे यकीन है कि ज्यादा नहीं होगा), लेकिन मानक एक्शन बार के साथ आप अपने लिए कस्टम लेआउट .xml लोड कर सकते हैं। एक्शन बार शीर्षक। उदाहरण के लिए, आप action_bar_title.xml हो सकता है:

private void setupActionBar() { 
     ActionBar ab = getActionBar(); 
     ab.setDisplayShowCustomEnabled(true); 
     ab.setDisplayShowTitleEnabled(false); 
     ab.setIcon(R.drawable.your_left_action_icon); 
     LayoutInflater inflator = (LayoutInflater) this 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     View v = inflator.inflate(R.layout.action_bar_title, null); 

     TextView titleTV = (TextView) v.findViewById(R.id.title); 
     Typeface font = Typeface.createFromAsset(getAssets(), 
       "fonts/your_custom_font.ttf"); 
     titleTV.setTypeface(font); 

     ab.setCustomView(v); 

      ab.setHomeAsUpEnabled(true); 
    } 

बाईं का नियंत्रण लेने के लिए:

<?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:background="@drawable/your_desired_background" > 

<TextView 
     android:id="@+id/title" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_centerInParent="true" 
      android:maxLines="1" 
      android:ellipsize="end" 
      android:text="@string/app_name" 
      android:textAppearance="?android:attr/textAppearanceMedium"/> 

</RelativeLayout> 

फिर, अपनी गतिविधि में, आप OnCreate() में इस तरह की एक विधि कॉल करना चाहते हैं कार्रवाई आइटम, आप अपनी गतिविधि में ऐसा कर सकता है:

@Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     switch (item.getItemId()) { 
     case R.id.yourRightActionItem: 
         //do something 
         return true; 
     case android.R.id.home: //<-- this will be your left action item 
      // do something 
      return true; 
     default: 
      return super.onOptionsItemSelected(item); 
     } 
    } 
बेशक

, आप भी अपने मेनू एक्सएमएल के रूप में अच्छी तरह कार्रवाई मदों के लिए अन्य आवश्यक व्यवस्था कर सुनिश्चित करें। यह किसी भी दाएं पक्षीय कार्रवाई वस्तुओं के लिए होगा।

संपादित करें: बस एक और टिप्पणी में आपने कहा कि शीर्षक एक छवि होगी। यदि ऐसा है, तो बस अपने ImageView के साथ मेरे उदाहरण में उपयोग किए गए टेक्स्ट व्यू I को प्रतिस्थापित करें, और setupActionBar() विधि में फ़ॉन्ट अनुकूलन कोड को अनदेखा करें।

संपादित 2: मैंने अपना जावा कोड अपडेट किया। आपको ab.setHomeAsUpEnabled (true) करने की आवश्यकता होगी, और फिर अदृश्य (या शायद @null हालांकि मुझे नहीं पता कि एंड्रॉइड इसे स्वीकार करेगा या नहीं) घर के लिए सूचक के रूप में आकर्षित करने के लिए एक कस्टम थीम है। यहाँ देखें (उत्तर here :)

<style name="Theme.MyFancyTheme" parent="android:Theme.Holo"> 
    <item name="android:homeAsUpIndicator">@drawable/my_fancy_up_indicator</item> 
    <!-- or you could try @null --> 
</style> 
+0

से लिया तो बाईं तरफ कार्रवाई आइटम का हल यह सही बटन का उपयोग कर के रूप में मैं पहली टिप्पणी में लिखा है, नकली करने के लिए हो सकता है? – urSus

+0

हां, और आप एंड्रॉइड के लिए एक कस्टम शैली जोड़ना चाहते हैं: homeAsUpIndicator ताकि आपको उस बाएं शेवरॉन सूचक नहीं मिलते हैं। मैं अधिक कोड के साथ अद्यतन करूँगा। – dennisdrew

+0

मैं एंड्रॉइड के बिना तीर को कैसे छुपा सकता हूं: homeAsUpIndicator? इसके लिए एपीआई स्तर 11 की आवश्यकता है और मेरा न्यूनतम 8 –