Durumunu belirlemek Eylem altında Bar
Soru Özeti:Nasıl Chrome Uygulaması ** 8 gibi içeri ProgressBar
bir entegre edebilir miyim?
Ayrıntılar:Krom: bu ekran görüntüsü bakın
Bu gibi bir Eylem Bar oluşturmak istiyorum. Eylem Çubuğunun hemen altında sayfa yükleme göre dolduran bir durumunu belirlemek var. Feedly gibi birçok uygulamalar bu örnek de gördüm, ama benim kendi uygulama oluşturmak mümkün olmamıştır. Android kendi API oluşturmak için kullanarak çalıştı:
@Override
protected void onCreate(Bundle savedInstanceState) {
//Request Permission to display the Progress Bar...
this.requestWindowFeature(Window.FEATURE_PROGRESS);
this.setWindowContentView(R.layout.activity_main)
super.onCreate(savedInstanceState);
this.setProgressBarIndeterminate(true);
}
Ama bu kod sadece durumunu belirlemek göstermesine neden olurüzerindeEylem, Bar gibi:
Nasıl benim durumunu belirlemek Chrome App gibi Eylem Çubuğunun altında görünür hale getirebilirim?
CEVAP
Biraz daha araştırma yaptım o yüzden kabul cevabı tam olarak memnun yukarıdaki değildim.
Kullandıklarına inanıyorum hile görünüm DecorView
adlı hiyerarşisinde üst görünümü çıkarmışlar ve orada ilerleme çubuğu eklendi. Bu şekilde, ilerleme çubuğu action bar VE içerik alanı hem de görüntüler. S. D. cevap ilerleme içerik alanı içine bar ve 'gerçek içeriği, uzay, beklenmedik sonuçlara neden olabilir. çalıyor koyar unutmayın
Örnekekran görüntüleriuygulama: bu
Kod
Sadece bazı etkinliği onCreate
yöntem içine bu kodu koymak ve çalışması gerekir:
// create new ProgressBar and style it
final ProgressBar progressBar = new ProgressBar(this, null, android.R.attr.progressBarStyleHorizontal);
progressBar.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, 24));
progressBar.setProgress(65);
// retrieve the top view of our application
final FrameLayout decorView = (FrameLayout) getWindow().getDecorView();
decorView.addView(progressBar);
// Here we try to position the ProgressBar to the correct position by looking
// at the position where content area starts. But during creating time, sizes
// of the components are not set yet, so we have to wait until the components
// has been laid out
// Also note that doing progressBar.setY(136) will not work, because of different
// screen densities and different sizes of actionBar
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.removeGlobalOnLayoutListener(this);
}
});
LayoutParams' height durumunu belirlemek daha geniş veya daha dar ayarlamak için değişken, ama -10
ofset ayarlamak gerekebilir. ile oynayabilirsiniz
Stil
Ne yazık ki, ilerleme çubuğu çirkin gri arka plan görebilirsiniz. Bu, sadece kimlik ile arka plan için arama kaldırmak için bunu saklamaya çalışmıyor. Arka planı kaldırmak için, sistem sürümü aynı drawble oluşturmak ve arka plan öğesi kaldırmak zorunda kaldım.
TL;DR: progress_horizontal_holo_no_background_light.xml
dosyası Oluştur ve bu drawable yapıştırın:
<?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>
Kopya uygun .png projenize sdk/platforms/android-xx/data/res/drawable-xxx/
drawables ve kod ekleyebilirsiniz:
progressBar.setProgressDrawable(getResources().getDrawable(R.drawable.progress_horizontal_holo_no_background_light));
Ekstra: Belirsiz İlerleme Çubuğu
Pre-KitKat belirsiz ilerleme sürümleri barlar oldukça çirkin ve kart her ikisi de.
Yeni pürüzsüz durumunu belirlemek ButteryProgressBar
adlı indirebilirsiniz. Sadece arama için google (veremem sonrası daha fazla bağlantılar, çünkü ben burada yeni : [ ) ekleyin sınıf halinde proje ve basitçe yerine önceki durumunu belirlemek ile bu kodu ve çıtır belirsiz ilerleme çubuğu:
final ButteryProgressBar progressBar = new ButteryProgressBar(this);
progressBar.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, 24));
Ayrıca bu kodu basitleştirmek gerekebilir:
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();
}
bu kod için:
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);
Umarım yardımcı olmuşumdur :)
Eğer dizinde gıt kontrol altında olup ...
Windows Form durumunu belirlemek: Kola...
Nasıl android belirsiz durumunu belirl...
Nasıl Eylem Bar ICS altında olması içi...
Nasıl durumunu belirlemek bir program ...