2015-08-24 3 views
5

मैं मार्जिन_ राइट के साथ दाईं ओर एक बटन के साथ एक एक्शन बार बनाना चाहता हूं। इस picture1 और मैं इसे करने के लिए कार्रवाई बटन का उपयोग करता हूं। लेकिन बटन मार्जिन_ राइट के बिना दाईं तरफ था। picture2 एंड्रॉइड: layout_marginRight यहां काम नहीं करता है।एक्शनबार पर एक अनुकूलित बटन कैसे जोड़ें?

यहाँ मेरी styles.xml है:

<resources> 
<!-- Base application theme. --> 
<style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar"> 
    <item name="android:actionBarSize">50dp</item> 
    <item name="android:actionBarStyle">@style/my_actionbar_style</item> 
    <item name="android:actionButtonStyle">@style/my_action_button</item> 

</style> 
<style name="my_actionbar_style" parent="android:Widget.ActionBar"> 
    <item name="android:background">@color/actionbar_backgroud</item> 
    <item name="android:titleTextStyle">@style/myTitleStyle</item> 
    <item name="android:displayOptions">showTitle</item> 
</style> 
<style name="myTitleStyle"> 
    <item name="android:textColor">#ffffff</item> 
    <item name="android:textSize">20sp</item> 
</style> 

<style name="my_action_button"> 
    <item name="android:background">@drawable/button_selector</item> 
    <item name="android:width">70dp</item> 
    <item name="android:textSize">13sp</item> 
    <item name="android:layout_marginTop">10dp</item> 
    <item name="android:layout_marginBottom">10dp</item> 
    <item name="android:layout_marginRight">10dp</item> 
</style> 

और यह मेरा menu.xml है:

<menu xmlns:tools="http://schemas.android.com/tools" 
xmlns:android="http://schemas.android.com/apk/res/android" 
tools:ignore="AppCompatResource"> 

<item 
    android:id="@+id/action_search" 
    android:title="submit" 
    android:showAsAction="always" /></menu> 
+0

आप कस्टम क्रिया बार http://stackoverflow.com/questions/15518414/how-can-i-implement-custom-action उपयोग कर सकते हैं के लिए अपनी गतिविधि में ऐसा -बार-साथ-कस्टम-बटन-इन-एंड्रॉइड – arun

+0

यदि यह संभव है, तो टूलबार का उपयोग करने का प्रयास करें। इसका उपयोग करना बहुत आसान है। http://stackoverflow.com/questions/32084868/actionbar-will-not-align-correctly-relativelayout/32084988#32084988 – Geetha

उत्तर

2

एक और त्वरित और स्वच्छ तरीके के बारे में यह है कि मेनू बटन के लिए अपने स्वयं के लेआउट को निर्दिष्ट किया जाता है जाने के लिए। इस

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:app="http://schemas.android.com/apk/res-auto" 
     xmlns:tools="http://schemas.android.com/tools" 
     tools:context="com.example.MainActivity"> 

    <item 
     android:id="@+id/action_custom_button" 
     android:title="Custom Button" 
     android:icon="@drawable/ic_custom_button" 
     app:actionLayout="@layout/layout_to_custom_button" 
     app:showAsAction="always" /> 

</menu> 

की तरह कुछ वहाँ जो गद्दी और शैली आप चाहते थे शामिल

layout_to_custom_button.xml

लेआउट फ़ाइल होना चाहिए।

और भी क्लिक करें घटना

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.menu_product_detail, menu); 
    final Menu mMenu = menu; 
    final MenuItem item = menu.findItem(R.id.action_custom_button); 
    item.getActionView().setOnClickListener(new View.OnClickListener(){ 

    @Override 
    public void onClick(View v) { 
     mMenu.performIdentifierAction(item.getItemId(), 0); 
    } 
    }); 
     return true; 
} 
+0

यह काम करता है! बहुत बहुत धन्यवाद। लेकिन मैंने पाया कि "एंड्रॉइड: showAsAcion =" हमेशा "" जोड़ा जाना चाहिए, या कार्रवाई बटन ओवरफ्लो – HungryMilk

+0

में छिपाएगा क्षमा करें, लेकिन मुझे एक और समस्या मिलती है। "एक्शनलेआउट" जोड़ने के बाद, सार्वजनिक बूलियन ऑनऑप्शन इटैम चयन (मेनूइटम आइटम) विधि काम नहीं करती है। ऐसा लगता है कि विधि सक्रिय नहीं की गई थी, हालांकि मैं – HungryMilk

+0

बटन पर क्लिक करता हूं, मैंने कस्टम मेनू आइटम के क्लिक ईवेंट को कैसे प्राप्त किया है, इस बारे में एक विधि जोड़ा है। धन्यवाद –

1

मैं सबसे आसान तरीका यह सिर्फ अपनी खुद की कार्रवाई बार का निर्माण करना था क्या करने के लिए मिल गया एक लेआउट फ़ाइल में। इसके बाद आप अपनी गतिविधियों को एक सामान्य गतिविधि से प्राप्त कर सकते हैं जो सेटकंटेंट व्यू को ओवरराइड करता है, जहां आप उस दृश्य को चिपकाते हैं जिसे आपको मूल दृश्य में दिया जाता है जिसमें आपकी और आपकी एक्शन बार होती है। आप ActionMenuView (5.0+) का उपयोग कर ओवरफ्लोइंग मेनू व्यवहार की नकल कर सकते हैं। उदाहरण के लिए, मान लें कि आपके एक ActionMenuView के साथ एक action_bar.xml में यह menuView नामित किया है:

class BaseActivity extends Activity { 

    ... 
    ActionMenuView mMenuView; 
    ... 

    @Override 
    protected void setContentView(int resId) { 
     LayoutInflater inflater = getLayoutInflater(); 
     View actionBar = inflater.inflate(R.layout.action_bar, null); 
     View contentView = inflater.inflate(resId); 

     mMenuView = (ActionMenuView)actionBar.findViewById(R.id.menuView); 

     RelativeLayout parentLayout = new RelativeLayout(this); 
     LayoutParams actionBarLayout = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); 
     actionBar.setLayoutParams(actionBarLayout); 
     parentLayout.addView(actionBar); 

     actionBar.setId(R.id.actionBar); 
     LayoutParams contentLayout = new LayoutParams(LayoutParams.MATCH_PARENT, 0); 
     contentLayout.addRule(RelativeLayout.BELOW, actionBar.getId());   
     contentLayout.addRule(RelativeLayout.ALIGN_WITH_PARENT_BOTTOM); 
     contentView.setLayoutParams(contentLayout); 
     parentLayout.addView(contentView); 

     setContentView(parentLayout); 
    } 

} 
+0

यह काम किया! आपका बहुत बहुत धन्यवाद! लेकिन मैं इस समस्या को हल करने के लिए xml का उपयोग करना पसंद करता हूं :) – HungryMilk

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