2013-03-20 5 views
13

मैं अपने एक्शनबार (एक्शनबैरशेलॉक का उपयोग करके) के अंदर एक अनिश्चित प्रगति पट्टी डालना चाहता हूं। सबकुछ काम करता है, लेकिन मैं चाहता हूं कि यह छोटी प्रगति पट्टी हो। मैं निम्नलिखित शैली का उपयोग करता हूं:एंटबर्मिनेट प्रोग्रेसबार इन एक्शनबार स्टाइलिंग - पैडिंग इश्यू

<style name="IndeterminateProgress" parent="@android:style/Widget.ProgressBar.Small"> 
    <item name="android:progressBarPadding">32dp</item> 
    <item name="progressBarPadding">32dp</item> 
    <item name="android:itemPadding">32dp</item> 
    <item name="itemPadding">32dp</item> 
</style> 


<style name="Widget.Styled.ActionBar.Tiles" parent="Widget.Sherlock.Light.ActionBar"> 
    <item name="android:indeterminateProgressStyle">@style/IndeterminateProgress</item> 
    <item name="android:progressBarPadding">32dp</item> 
    <item name="progressBarPadding">32dp</item> 
    <item name="android:itemPadding">32dp</item> 
    <item name="itemPadding">32dp</item> 
</style> 

समस्या यह है कि मैं प्रगति पट्टी पर पैडिंग सेट नहीं कर सकता। आप ऊपर देख सकते हैं, मैं, itemPadding और progressBarPadding के हर संभव संयोजन की कोशिश की है आदि

परिणाम हमेशा एक ही है: enter image description here

कोई भी विचार?

उत्तर

10

मैं एक काम कर समाधान कैसे उचित आकार और गद्दी साथ अनिश्चित प्रगति बार स्थापित करने के लिए मिल गया। मेरा समाधान setActionView() के साथ वर्कअराउंड का उपयोग नहीं करता है। यह अंतर्निहित प्रगति पट्टी कार्यक्षमता का समाधान है, जो मूल क्रिया पट्टी (एक्शनबारशेलॉक) द्वारा समर्थित है। प्रोग्रेस बार सेट प्रोग्रेसबार के माध्यम से सक्षम/अक्षम किया गया है INDeterminateVisibility (बूलियन) विधि। मैंने इसे एंड्रॉइड 2, 3, 4 और एलडीपीआई, एमडीपीआई, एक्सएचडीपीआई पर परीक्षण किया।

Result

AndroidManifest.xml:

<application 
    ... 
    android:theme="@style/Theme.Example"> 

/res/values/styles.xml:

<resources xmlns:android="http://schemas.android.com/apk/res/android"> 
    ... 

    <style name="Theme.Example" parent="Theme.Sherlock"> 
     <item name="actionBarStyle">@style/Example.ActionBar</item> 
     <item name="android:actionBarStyle">@style/Example.ActionBar</item> 
    </style> 

    <style name="Example.ActionBar" parent="Widget.Sherlock.ActionBar"> 
     <item name="indeterminateProgressStyle">@style/Example.ActionBar.IndeterminateProgressBar</item> 
     <item name="android:indeterminateProgressStyle">@style/Example.ActionBar.IndeterminateProgressBar</item> 
    </style> 

    <style name="Example.ActionBar.IndeterminateProgressBar" parent="@android:style/Widget.ProgressBar.Large.Inverse"> 
     <item name="android:indeterminateDrawable">@drawable/layer_list_ab_indeterminate_progress_bar</item> 
     <item name="android:minWidth">@dimen/ab_indeterminate_progress_bar_size</item> 
     <item name="android:maxWidth">@dimen/ab_indeterminate_progress_bar_size</item> 
     <item name="android:minHeight">@dimen/ab_indeterminate_progress_bar_size</item> 
     <item name="android:maxHeight">@dimen/ab_indeterminate_progress_bar_size</item> 
    </style> 
</resources> 

/res/drawable/layer_list_ab_indeterminate_progress_bar.xml:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item> 
     <!-- 
     /res/drawable-mdpi/ab_indeterminate_progress_bar asset is taken from 
     /sdk/platforms/android-18/data/res/mdpi/spinner_white_48.png 
     and its content (optical square) is resized to ~0.6 (must be even number) 

     /res/drawable-mdpi-v14/ab_indeterminate_progress_bar asset is taken from 
     /sdk/platforms/android-18/data/res/mdpi/spinner_48_outer_holo.png 
     and its content (optical square) is resized to 0.75 
     --> 
     <rotate 
      android:drawable="@drawable/ab_indeterminate_progress_bar" 
      android:interpolator="@android:anim/linear_interpolator" 
      android:pivotX="50%" 
      android:pivotY="50%" 
      android:fromDegrees="0" 
      android:toDegrees="360" /> 
    </item> 
</layer-list> 

/res/values/dimens.xml:

<dimen name="ab_indeterminate_progress_bar_size">48dp</dimen> 

अंत में मैं प्रगति बार संपत्ति बनाई।हनीकोम्ब के लिए

  • /sdk/platforms/android-18/data/res/mdpi/spinner_white_48.png और पुराने
  • /SDK/प्लेटफार्मों/एंड्रॉयड-18: मैं एंड्रॉयड एसडीके से इन दोनों की संपत्ति का इस्तेमाल किया आईसीएस और के लिए /data/res/mdpi/spinner_48_outer_holo.png नए

उचित आकार और गद्दी पाने के लिए, हम संपत्ति आकार बदलना होगा। मैंने spinner_white_48.png को ~ 0.6 का आकार बदल दिया। एमडीपीआई के लिए, यह 28 पीएक्स था। यह केंद्रीय सममित होने के लिए भी संख्या होनी चाहिए। मैंने केवल सामग्री का आकार बदल दिया, पूरे आइकन पर नहीं। इसलिए एमडीपीआई में आइकन अभी भी 48 पीएक्स है, लेकिन इसकी सामग्री (ऑप्टिकल स्क्वायर) छोटा है (28 पीएक्स)। आप आसानी से सामग्री का आकार बदल सकते हैं: पहले "छवि आकार" को 28px X 28px में बदलें, फिर "कैनवास आकार" को 48px X 48px पर बदलें। मैंने 0.75 पर spinner_48_outer_holo.png का आकार बदल दिया। आप नीचे संपत्ति डाउनलोड कर सकते हैं।

मैं हनीकॉम- और आईसीएस + के लिए अलग-अलग संपत्तियों का उपयोग क्यों करूं? क्योंकि अगर मैं केवल होलो संपत्तियों का उपयोग कर रहा हूं, तो हनीकॉम के साथ कुछ उपकरणों पर एनीमेशन थोड़ा सा घबराहट है।

युक्ति: आप layer_list_ab_indeterminate_progress_bar.xml पर कुछ एनीमेशन के साथ एक और आइटम जोड़ सकते हैं। उदाहरण के लिए मानक होलो प्रगति बार विपरीत दिशा और विभिन्न डिग्री सीमा के साथ 2 एनिमेशन का उपयोग करता है। एसडीके में progress_medium_holo.xml देखें।

/res/drawable-mdpi/ab_indeterminate_progress_bar.png:

enter image description here

/res/drawable-mdpi-v14/ab_indeterminate_progress_bar.png (शायद ही इस पृष्ठ पर दृश्यमान):

enter image description here

/res/drawable-hdpi/ab_indeterminate_progress_bar.png:

enter image description here

/res/drawable-hdpi-v14/ab_indeterminate_progress_bar.png (शायद ही इस पृष्ठ पर दृश्यमान):

enter image description here

/res/drawable-xhdpi/ab_indeterminate_progress_bar.png:

enter image description here

/res/drawable-xhdpi-v14/ab_indeterminate_progress_bar।png (शायद ही इस पृष्ठ पर दृश्यमान):

enter image description here

+0

क्या कस्टम ड्रॉबल्स और आकार बदलने के बिना इसे करने का कोई तरीका नहीं है? वांछित प्रभाव लगभग आपके द्वारा वर्णित शैली में 'minWidth',' minHeight', 'maxWidth',' maxHeight' सेट करके प्राप्त किया जा सकता है, लेकिन 'प्रोग्रेसबार' कोने में दिखाई देता है (बिना 3-बिंदु ओवरफ़्लो मेनू आइकन के यह भयानक दिखता है)। स्टाइल में 'पैडिंग' सेट करना, 'layout_margin' को कोई प्रभाव नहीं पड़ता है। क्यूं कर! क्यूं कर!!?? – janakagamini

1

मैं सटीक जवाब पता नहीं है, लेकिन इन सेटिंग्स मेरे लिए काम किया ..

यह मेरा refresh_spinner.xml

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:gravity="center"> 
<ProgressBar android:layout_width="32dp" 
android:layout_height="32dp" 
android:layout_gravity="center" 
android:layout_marginRight="12dp" 
android:layout_marginLeft="12dp" 
style="?indeterminateProgressStyle" /> 
    </FrameLayout> 

और यह इसी शैली में एक्सएमएल है

<style name="Widget.MyTheme.ActionBar" parent="Widget.Sherlock.ActionBar"> 
    <item name="indeterminateProgressStyle">?android:attr/progressBarStyleSmallInverse</item> 
</style> 

ये सेटिंग्स मेरे लिए काम किया। यदि आपको कोई संदेह है तो कृपया मुझे बताएं।

सादर Parvaz भास्कर

EDIT2: के बाद से मैं विभिन्न तरीकों कोशिश कर रहा था मैं का उपयोग कर समाप्त हो गया एंड्रॉयड: attr/progressBarStyleSmallInverse मेरी style.xml जो मैं बाद में के तहत मेरे स्पिनर एक्सएमएल से यह refrenced में केवल संपत्ति के रूप में शैली के रूप में शैली = "indeterminateProgressStyle?"

संपादित करें: अपने MENUITEM के संदर्भ रखने के लिए और जब भी आप एक ताज़ा प्रगति बार उपयोग setActionView (R.layout.your_layout) दिखाना चाहते हैं, और अशक्त के लिए इसे बदल जब जरूरत खत्म हो गया है । onCreateOptionsMenu शुरुआत में मेनू Item को पकड़ने के लिए एक अच्छी जगह होगी।

+1

धन्यवाद, लेकिन यह काम नहीं किया। ईमानदार होने के लिए मुझे नहीं पता कि यह कैसे काम करना चाहिए, क्योंकि आप अपनी शैली में कहीं भी 'refresh_spinner.xml' फ़ाइल का संदर्भ नहीं देते हैं। क्या आप वाकई 'एक्शनबार' –

+0

के अंदर 'प्रोग्रेसबार' का मतलब है क्षमा करें, मैं उल्लेख करना भूल गया था। जब मैं menuItem.setActionView (R.layout.refresh_spinner) के साथ क्लिक करता हूं, तो इसे अपने मेनू इटैम को प्रतिस्थापित करता हूं, और इसे सामान्य में बदलने के लिए मैं ऑडिग्नल आइकन –

+0

को हटाने और बनाए रखने के लिए menuItem.setActionView (null) का उपयोग करता हूं, मुझे एक्शन व्यू के समाधान के बारे में पता था । एक्शनबार कार्यान्वयन में निर्मित प्रगति पट्टी कार्यक्षमता के साथ समाधान की तलाश में था - 'setProgressBarIndeterminateVisibility (true)' वैसे भी धन्यवाद :) –

1

मैं आज से मिलने और के लिए एक समाधान खोजने के एंड्रॉयड 3/4 +

ProgressBar mProgressBarInActionBar = null; 
Resources res = Resources.getSystem(); 
int id = res.getIdentifier("progress_circular", "id", "android"); 
View internal = findViewById(id); 
if(internal != null && internal instanceof ProgressBar){ 
    mProgressBarInActionBar = (ProgressBar)internal; 
} 
mProgressBarInActionBar.setPadding(0, 0, right, 0); 

सेट एक उपयुक्त सही:)

1

मुझे एक ही समस्या थी और मुझे एक आसान उत्तर मिला:

<style name="ActionBarProgressBar.MyStyle" parent="@android:style/Widget.Holo.ProgressBar.Large"> 
     <item name="android:minWidth">56dp</item> 
     <item name="android:maxWidth">56dp</item> 
     <item name="android:minHeight">35dp</item> 
     <item name="android:maxHeight">35dp</item> 
</style> 

चौड़ाई मानक एक्शनबार आइटम चौड़ाई है। यदि आप minHeight और maxHeight को बदलते हैं, तो छवि दोनों तरीकों से स्केल करेगी।

<style name="action_bar_theme" parent="@android:style/Widget.Holo.ActionBar"> 
     <item name="android:indeterminateProgressStyle">@style/ActionBarProgressBar.MyStyle</item> 
</style> 

और विषय का उपयोग कर रहे (अपने मेनिफ़ेस्ट में इसका इस्तेमाल करने की भूल नहीं है) में परिभाषा:

और यहाँ Actionbar स्टाइल जहां अनिश्चित प्रगति की उपस्थिति सेट किया गया है

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> 
     <item name="android:actionBarStyle">@style/action_bar_theme</item>  
</style> 

चीयर्स, पॉल

+1

यह ठीक काम किया, धन्यवाद – praveenb

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