2014-11-07 6 views
6

Sto usando il legacy ShowcaseView per Android. Ho notato che l'emulatore di Android 5 mette il pulsante OK sotto la barra di navigazione, mentre Android < = KITKAT non ha avuto questo comportamento.Android 5: pulsante sotto la barra di navigazione (Showcaseview legacy)

vedere il pulsante OK nell'angolo in basso a destra qui: http://imgur.com/SZtIcHr

Ho già provato Android: fitsSystemWindows = "true", ma senza successo. Ecco il codice rilevante nel ShowcaseView.java che ho trovato:

mEndButton = (Button) LayoutInflater.from(context).inflate(R.layout.showcase_button, null); 

(Attenzione: Evitare passando null come la radice vista (necessario per risolvere i parametri di layout sul elemento principale del layout di gonfiato)) [..]

if (!mOptions.noButton && mEndButton.getParent() == null) { 
     RelativeLayout.LayoutParams lps = (LayoutParams) generateDefaultLayoutParams(); 
     lps.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM); 
     if (getConfigOptions().showcaseId==3) 
      lps.addRule(RelativeLayout.ALIGN_PARENT_LEFT); 
     else 
      lps.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); 
     int margin = ((Number) (metricScale * 12)).intValue(); 
     if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) // TODO: LOLLIPOP workaround 
      lps.setMargins(margin, margin, margin, margin*5); 
     else 
      lps.setMargins(margin, margin, margin, margin); 
     lps.height = LayoutParams.WRAP_CONTENT; 
     lps.width = LayoutParams.WRAP_CONTENT; 
     mEndButton.setLayoutParams(lps); 
     mEndButton.setText(buttonText != null ? buttonText : getResources().getString(R.string.positive)); 
     if (!hasCustomClickListener) mEndButton.setOnClickListener(this); 
     addView(mEndButton); 

Non so come modificare questo o come il design di materiale 5/Android ha causato questo comportamento. Sarei felice per un suggerimento! :)

risposta

3

Per me il lavoro imposta manualmente il margine inferiore senza utilizzare il margine restituito dal metodo per ottenere il margine int.

RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); 

layoutParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM); 
layoutParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); 

int margin = ((Number) (context.getResources().getDisplayMetrics().density * 12)).intValue(); 

layoutParams.setMargins(margin, margin, margin, 120); 

spero che funziona ...


Il problema è stato risolto here ...

3

ho trovato molto facile correzione di questo in one of pull requests

Add:

<item name="android:windowDrawsSystemBarBackgrounds">false</item> 

per il tuo stile/tema in valori-v21/styles.xml.

Funziona bene per me, controllato su un dispositivo reale - Nexus 5.