2011-12-06 4 views
17

In My android layout xml sto applicando il bordo usando borderframe.xml come sfondo.Perché non riesco a creare il bordo rotondo per l'angolo specifico?

file di borderframe.xml si presenta come di seguito:

<?xml version="1.0" encoding="UTF-8"?> 
<shape 
    xmlns:android="http://schemas.android.com/apk/res/android"> 
    <stroke 
     android:width="1dip" 
     android:color="#ffffff"/> 
    <solid 
     android:color="#95865F"/> 
    <corners 
     android:radius="10px"/> 

    <padding 
     android:left="1dp" 
     android:right="1dp" 
     android:top="1dp" 
     android:bottom="1dp"/> 
</shape> 

ora, mentre v'è un Android: raggio = "10px", allora è opere ma mentre sto andando a dare forma rotonda al solo angolo specifico allora non funziona. Non c'è alcun messaggio di erro nel registro di gatto, ma ho trovato errori in Eclipse come:

The graphics preview in the layout editor may not be accurate: 
* Different corner sizes are not supported in Path.addRoundRect. 

Anche se non v'è alcuna imbottitura in quel file XML poi anche io non sono in grado di vedere ogni confine.

Ora, cosa dovrei fare per questo? e che cosa ne pensi se voglio creare il bordo arrotondato solo per TopLeftcorner e LowerLeftCorner. ? Grazie.

risposta

10

Dovrete farlo, supponendo che si desideri solo un angolo superiore sinistro arrotondato:

<shape xmlns:android="http://schemas.android.com/apk/res/android" 
     android:shape="rectangle"> 
    <corners 
     android:radius="20sp" 
     android:topRightRadius="0dp" 
     android:bottomRightRadius="0dp" 
     android:bottomLeftRadius="0dp" /> 
    <gradient 
     android:startColor="@color/logo_blue" 
     android:endColor="@color/blue" 
     android:angle="0"/> 
</shape> 

Spiegazione: Ogni angolo deve (inizialmente) essere previsto un raggio d'angolo maggiore di 1, oppure nessun angolo è arrotondato. Se si desidera che gli angoli specifici non vengano arrotondati, è necessario utilizzare lo android:radius per impostare un raggio dell'angolo predefinito superiore a 1, ma poi ignorare ogni angolo con i valori desiderati, fornendo zero ("0dp") dove non vuoi angoli arrotondati. [source]

Di conseguenza, è necessario definire il drawable come:

<?xml version="1.0" encoding="UTF-8"?> 
<shape 
    xmlns:android="http://schemas.android.com/apk/res/android"> 
    <stroke 
     android:width="1dip" 
     android:color="#ffffff"/> 
    <solid 
     android:color="#95865F"/> 
    <corners 
     android:radius="10px" 
     android:topRightRadius="0dp" 
     android:bottomRightRadius="0dp" /> 

    <padding 
     android:left="1dp" 
     android:right="1dp" 
     android:top="1dp" 
     android:bottom="1dp"/> 
</shape> 

Aggiornamento

Da The Shape Drawable Resource Android Documentation:

Android: raggio Dimension. Il raggio per tutti gli angoli, come valore valore o risorsa dimensione. Questo è sovrascritto per ogni angolo dagli attributi seguenti .

sovrascritto è la parola chiave per il vostro problema ...

+0

OK Grazie. Fammi provare. –

+1

Ok grazie. Ma se non c'è un padding definito in forma, allora non sono in grado di vedere il bordo. . perché ? –

+0

Se non ci sono padding in quella forma, allora non sono in grado di vedere l'angolo perché ?? –

6

sto usando strumenti SDK 19, platform-tools 11 e in esecuzione l'applicazione in Android 4.0.3. Utilizzando il seguente codice XML funziona per me:

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle"> 
    <solid android:color="#dd000000"/> 
    <padding 
     android:left="7dp" 
     android:top="7dp" 
     android:right="7dp" 
     android:bottom="7dp" /> 
    <corners 
     android:bottomLeftRadius="25dp" 
     android:bottomRightRadius="25dp" 
     android:topLeftRadius="0dp" 
     android:topRightRadius="0dp" /> 
</shape> 

avvertimento Eclipse non è di essere in grado di mostrare l'anteprima. In het app si presenta corretto.

+0

Aha. Succede ancora con Android Studio al momento. –

16

Anche io sto affrontando lo stesso problema. Ma per quello io uso la lista dei livelli. Inserisco qui la mia risposta che potrebbe aiutarti. Si prega di verificare
schermo uscita image 1

<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" > 
    <item> 
     <shape 
     android:shape="rectangle"> 
      <stroke android:width="1dp" android:color="#c1c1c1" /> 
      <solid android:color="#c1c1c1" /> 
      <corners android:radius="20dp"/> 
     </shape> 
    </item> 

    <item android:right="20dp" 
     > 
     <shape 
     android:shape="rectangle"> 
      <stroke android:width="1dp" android:color="#c1c1c1" /> 
      <solid android:color="#c1c1c1" /> 
     </shape> 
    </item> 

</layer-list> 
+0

Questo è l'unico che funziona per me. Grazie. – black

0

ho ottenuto la soluzione su uno dei forum. L'ho risolto commentando ogni angolo & aggiungendo al xml in drawable.Ho mantenuto il codice commentato qui sotto solo per la comprensione.

XML Code-

<?xml version="1.0" encoding="utf-8"?> 
    <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" > 
     <solid android:color="#fd2149" /> 
     <stroke android:width="1dip" android:color="#ffd102"/> 
     <!-- <corners 
      android:bottomLeftRadius="8dp" 
      android:bottomRightRadius="8dp" 
      android:topLeftRadius="8dp" 
      android:topRightRadius="8dp" /> 
     --> 
     <corners android:radius="8dp" /> 
    </shape> 

--- Edited- Il codice di cui sopra è il mio back.xml nella cartella drawable e se necessario è possibile aggiungere imbottiture allo stesso back.xml. Per coloro che sono nuovi sviluppatori, il back.xml viene fatto riferimento dal file di layout come segue

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/tableLayout1" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:textSize="20sp" 
    android:scrollbars="vertical" 
    android:background="@drawable/back"> 

Spero che questo aiuti.

Problemi correlati