8

Ich habe nach Antworten gesucht, wie man den unbestimmten horizontalen Fortschrittsbalken unter der Aktionsleiste mit AppCompat platziert. Ich kann den horizontalen Fortschrittsbalken anzeigen, aber er befindet sich oben in der Aktionsleiste. Ich möchte es unter/unter der Aktionsleiste wie gmail (außer ohne den Pull zu aktualisieren).Indeterminate Horizontal ProgressBar BELOW ActionBar mit AppCompat?

hat ich den folgenden Code die Fortschrittsbalken zu haben scheint:

supportRequestWindowFeature(Window.FEATURE_PROGRESS); 
setContentView(R.layout.main_activity); 
setSupportProgressBarIndeterminate(Boolean.TRUE); 
setSupportProgressBarVisibility(true); 

aber dies stellt die horizontalen Fortschrittsbalken am oberen Ende der Aktionsleiste. Kann jemand den Fortschrittsbalken unterhalb der Aktionsleiste platzieren?

+1

Es gibt eine Arbeit um vorgeschlagen von: http://StackOverflow.com/Questions/13934010/progressbar-under-action-bar/15073680#15073680 aber diese Lösung ziemlich viel vereitelt den ganzen Zweck des Versuchs, AppCompat zu verwenden. Kann jeder den Fortschrittsbalken mithilfe von AppCompat unterhalb der Aktionsleiste positionieren? – user2382843

+0

Unglaublich, wie so ein gemeinsames Problem keine einfache Lösung hat ... –

Antwort

6

Ich hatte vor kurzem ein ähnliches Problem und löste es, indem ich meine eigene Fortschrittsleiste erstellte und sie dann durch Manipulation von getTop() der Inhaltsansicht anpasste.

Also zuerst erstellen Sie Ihre Fortschrittsbalken.

final LayoutParams lp = new LayoutParams(LayoutParams.MATCH_PARENT, 20); //Use dp resources 


mLoadingProgressBar = new ProgressBar(this, null, android.R.attr.progressBarStyleHorizontal); 
mLoadingProgressBar.setIndeterminate(true); 
mLoadingProgressBar.setLayoutParams(lp); 

Fügen Sie es zu dem Fenster (Dekor Ansicht)

final ViewGroup decor = (ViewGroup) getWindow().getDecorView(); 
decor.addView(mLoadingProgressBar); 

Und um es in seiner richtigen Position Im bekommen ViewTreeObserver verwenden, die die Ansicht hört bis geführt gelegt (aka die View.getTop() ist nicht 0).

final ViewTreeObserver vto = decor.getViewTreeObserver(); 
    vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { 

     final View content = getView(android.R.id.content); 

     @Override 
     public void onGlobalLayout() { 
      int top = content.getTop(); 

      //Dont do anything until getTop has a value above 0. 
      if (top == 0) 
       return; 

      //I use ActionBar Overlay in some Activities, 
      //in those cases it's size has to be accounted for 
      //Otherwise the progressbar will show up at the top of it 
      //rather than under. 

      if (getSherlock().hasFeature((int) Window.FEATURE_ACTION_BAR_OVERLAY)) { 
       top += getSupportActionBar().getHeight(); 
      } 

      //Remove the listener, we dont need it anymore. 
      Utils.removeOnGlobalLayoutListener(decor, this); 

      //View.setY() if you're using API 11+, 
      //I use NineOldAndroids to support older 
      ViewHelper.setY(mLoadingProgressBar, top); 
     } 
    }); 

Hoffnung, die für Sie Sinn macht. Viel Glück!

Verwandte Themen