मैं ऊपर दिए गए स्वीकृत उत्तर से पूरी तरह संतुष्ट नहीं था, इसलिए मैंने खुद कुछ अतिरिक्त शोध किया।
मुझे लगता है कि उन्होंने जिस चाल का इस्तेमाल किया है, वह यह है कि उन्होंने पदानुक्रम में शीर्ष दृश्य को पुनः प्राप्त किया DecorView
और बुलाया प्रगति पट्टी को वहां जोड़ा। इस तरह, प्रगति पट्टी एक्शन बार और सामग्री क्षेत्र दोनों पर प्रदर्शित होती है। ध्यान दें कि एसडी का उत्तर सामग्री क्षेत्र में प्रगति पट्टी को रखता है और वास्तविक सामग्री से 'चोरी' करता है, जिससे अप्रत्याशित परिणाम हो सकते हैं।
इस कार्यान्वयन के नमूना स्क्रीनशॉट :
कोड
बस इस कोड को onCreate
कुछ गतिविधि की विधि में रखें और इसे काम करना चाहिए:
final ProgressBar progressBar = new ProgressBar(this, null, android.R.attr.progressBarStyleHorizontal);
progressBar.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, 24));
progressBar.setProgress(65);
final FrameLayout decorView = (FrameLayout) getWindow().getDecorView();
decorView.addView(progressBar);
ViewTreeObserver observer = progressBar.getViewTreeObserver();
observer.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
View contentView = decorView.findViewById(android.R.id.content);
progressBar.setY(contentView.getY() - 10);
ViewTreeObserver observer = progressBar.getViewTreeObserver();
observer.removeOnGlobalLayoutListener(this);
}
});
आप प्रगति को व्यापक या संकरा सेट करने के लिए लेआउटप्रेमम्स की ऊँचाई तर्क के साथ खेल सकते हैं, लेकिन आपको -10
ऑफसेट को समायोजित करना पड़ सकता है ।
स्टाइल
दुर्भाग्य से, आप प्रगति बार की बदसूरत ग्रे पृष्ठभूमि देख सकते हैं। इसे हटाने के लिए, बस आईडी द्वारा पृष्ठभूमि की खोज करना और इसे छिपाने की कोशिश करना काम नहीं करता है। पृष्ठभूमि को हटाने के लिए, मुझे सिस्टम संस्करण के समान दोषपूर्ण बनाना होगा और पृष्ठभूमि आइटम को निकालना होगा।
TL; DR: फाइल बनाएं progress_horizontal_holo_no_background_light.xml
और इस ड्रॉबल को पेस्ट करें:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@android:id/secondaryProgress">
<scale android:scaleWidth="100%"
android:drawable="@drawable/progress_secondary_holo_light" />
</item>
<item android:id="@android:id/progress">
<scale android:scaleWidth="100%"
android:drawable="@drawable/progress_primary_holo_light" />
</item>
</layer-list>
sdk/platforms/android-xx/data/res/drawable-xxx/
अपनी परियोजना से उपयुक्त .png ड्राबेल कॉपी करें और फिर उस कोड में जो आप जोड़ सकते हैं:
progressBar.setProgressDrawable(getResources().getDrawable(R.drawable.progress_horizontal_holo_no_background_light));
अतिरिक्त: अनिश्चितकालीन प्रगति पट्टी
अनिश्चितकालीन प्रगति सलाखों के पूर्व किटकैट संस्करण बहुत बदसूरत और सुस्त हैं। आप नई चिकनी प्रगति डाउनलोड कर सकते हैं ButteryProgressBar
। बस इसे Google पर खोजें (मैं कोई और लिंक पोस्ट नहीं कर सकता, क्योंकि मैं यहां नया हूं: [), अपने प्रोजेक्ट में क्लास जोड़ें और आप बस पिछले प्रोग्रेसबार को इस कोड से बदल सकते हैं और खस्ता अनिश्चितकालीन प्रगति बार कर सकते हैं:
final ButteryProgressBar progressBar = new ButteryProgressBar(this);
progressBar.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, 24));
आपको इस कोड को सरल बनाने की भी आवश्यकता हो सकती है:
final TypedArray ta = c.obtainStyledAttributes(attrs, R.styleable.ButteryProgressBar);
try {
mBarColor = ta.getColor(R.styleable.ButteryProgressBar_barColor,
c.getResources().getColor(android.R.color.holo_blue_light));
mSolidBarHeight = ta.getDimensionPixelSize(
R.styleable.ButteryProgressBar_barHeight,
Math.round(DEFAULT_BAR_HEIGHT_DP * mDensity));
mSolidBarDetentWidth = ta.getDimensionPixelSize(
R.styleable.ButteryProgressBar_detentWidth,
Math.round(DEFAULT_DETENT_WIDTH_DP * mDensity));
} finally {
ta.recycle();
}
इस कोड के लिए:
mBarColor = c.getResources().getColor(android.R.color.holo_blue_light)
mSolidBarHeight = Math.round(DEFAULT_BAR_HEIGHT_DP * mDensity)
mSolidBarDetentWidth = Math.round(DEFAULT_DETENT_WIDTH_DP * mDensity)
आशा है कि मैंने मदद की :)