2016-03-04 15 views
14

Qual è lo scopo dell'attributo useLevel di tag shape xml di Android? Questo è rispetto ad una lista di livelli ma non dovrebbe avere importanza. Dal docs ho trovato la meanging del tag useLevel:Android -purpose of useLevel in shape tag

Indica se il livello del drawable influenza il modo in cui il gradiente è disegnato.

Quindi, se ho il seguente codice XML frammento:

<?xml version="1.0" encoding="utf-8"?> 
<shape 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="ring" 
    android:innerRadius="15dp" 
    android:thickness="10dp" 
    android:useLevel="false"> 

    <solid android:color="#ababf2" /> 

    <size 
     android:height="50dp" 
     android:width="50dp" /> 
</shape> 

poi con l'useLevel = true, l'anello è disabilitato. Deve essere falso affinché l'anello appaia. Ma qual è lo scopo di questo attributo? I documenti non sono chiari.

+0

'I documenti non sono chiari - come mai prima su Android, giusto? :) –

+0

[Questa parte dei documenti] (http://developer.android.com/guide/topics/resources/drawable-resource.html#Shape) ha "android: useLevel' sull'elemento' ', con un descrizione di "true se questo è usato come LevelListDrawable." 'LevelListDrawable' ha sicuramente la nozione di livello. Detto questo, non capisco la relazione qui. – CommonsWare

risposta

1

È per ProgressBars. Ad esempio, this gist utilizza una forma ad anello come un disegno progressivo.

ris/drawable/github_232_circular.xml:

<shape xmlns:android="http://schemas.android.com/apk/res/android" 
     android:innerRadiusRatio="2.3" 
     android:shape="ring" 
     android:thickness="3.8sp" 
     android:useLevel="true"> 
    <solid android:color="#ff0000" /> 
</shape> 

nel layout:

<ProgressBar 
    android:id="@+id/progress" 
    style="?android:attr/progressBarStyleHorizontal" 
    android:layout_width="64dp" 
    android:layout_height="64dp" 
    android:layout_gravity="top|end" 
    android:max="100" 
    android:progress="0" 
    android:progressDrawable="@drawable/github_232_circular" 
/> 

Fondamentalmente, useLevel rende così drawable può essere disegnato parzialmente. Ad esempio, esiste un metodo ImageView.setImageLevel() che ti consente di impostare un "livello", ad es. Il 25% di progresso, quindi il drawable dell'anello verrebbe disegnato come un quarto di cerchio. E ProgressBar.setProgress() fa la stessa cosa, aggiornando il "livello" del drawable che hai impostato su ProgressBar.

+0

quindi affermando che useLevel rende circolare la barra di avanzamento? Non ti seguo ancora come la forma che hai fornito è alarena un anello. – j2emanue

+0

'useLevel' lo rende in modo che il drawable possa essere disegnato parzialmente. Ad esempio, esiste un metodo 'ImageView.setImageLevel()' che consente di impostare un "livello", ad es. Il 25% di progresso, quindi il drawable dell'anello verrebbe disegnato come un quarto di cerchio. E ProgressBar imposta il "livello" estraibile ogni volta che usi 'ProgressBar.setProgress()'. Aggiornerò la mia risposta con questo dettaglio in più. – TalkLittle