SORU
18 Aralık 2012, Salı


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

Chrome for Android screenshot

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:

My App Screenshot

Nasıl benim durumunu belirlemek Chrome App gibi Eylem Çubuğunun altında görünür hale getirebilirim?

CEVAP
8 HAZİRAN 2014, Pazar


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

ProgressBar

ProgressBarIndeterminate

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 :)

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Cole Rolland

    Cole Rolland

    23 Kasım 2008
  • incognitotraveler

    incognitotra

    27 Mayıs 2010
  • TSE

    TSE

    12 Kasım 2012