resource - src android




Como fazer layout com cantos arredondados..? (11)

1: Defina layout_bg.xml em drawables:

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="#FFFFFF"/>
    <stroke android:width="3dp" android:color="#B1BCBE" />
    <corners android:radius="10dp"/>
    <padding android:left="0dp" android:top="0dp" android:right="0dp" android:bottom="0dp" />
</shape>

2: Adicione layout_bg.xml como plano de fundo ao seu layout

android:background="@drawable/layout_bg"

Como posso criar um layout com cantos arredondados? Eu quero aplicar cantos arredondados ao meu LinearLayout .


Aqui está uma cópia de um arquivo XML para criar um drawable com um fundo branco, borda preta e cantos arredondados:

 <?xml version="1.0" encoding="UTF-8"?> 
    <shape xmlns:android="http://schemas.android.com/apk/res/android"> 
        <solid android:color="#ffffffff"/>    

        <stroke android:width="3dp"
                android:color="#ff000000"
                />

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

        <corners android:bottomRightRadius="7dp" android:bottomLeftRadius="7dp" 
         android:topLeftRadius="7dp" android:topRightRadius="7dp"/> 
    </shape>

salve-o como um arquivo xml no diretório drawable, use-o como se fosse usar qualquer segundo plano drawable (ícone ou arquivo de recurso) usando seu nome de recurso (R.drawable.your_xml_name)


Eu fiz assim:

Verifique a captura de tela:

Crie um arquivo drawable chamado com custom_rectangle.xml na pasta drawable :

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle" >

    <solid android:color="@android:color/white" />

    <corners android:radius="10dip" />

    <stroke
        android:width="1dp"
        android:color="@android:color/white" />

</shape>

Agora aplique o fundo do retângulo na visualização :

mView.setBackground(R.drawlable.custom_rectangle);

Feito


Função para definir raio de canto programaticamente

static void setCornerRadius(GradientDrawable drawable, float topLeft,
        float topRight, float bottomRight, float bottomLeft) {
    drawable.setCornerRadii(new float[] { topLeft, topLeft, topRight, topRight,
            bottomRight, bottomRight, bottomLeft, bottomLeft });
}

static void setCornerRadius(GradientDrawable drawable, float radius) {
    drawable.setCornerRadius(radius);
}

Usando

GradientDrawable gradientDrawable = new GradientDrawable();
gradientDrawable.setColor(Color.GREEN);
setCornerRadius(gradientDrawable, 20f);
//or setCornerRadius(gradientDrawable, 20f, 40f, 60f, 80f); 

view.setBackground(gradientDrawable);

Se você gostaria de fazer seu layout arredondado, é melhor usar o CardView, ele forneceu muitos recursos para tornar o design bonito.

<android.support.v7.widget.CardView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    card_view:cardCornerRadius="5dp">
      <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <TextView
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight=".3"
                android:text="@string/quote_code"
                android:textColor="@color/white"
                android:textSize="@dimen/text_head_size" />
      </LinearLayout>
</android.support.v7.widget.CardView>

Com este card_view: cardCornerRadius = "5dp", você pode mudar o raio.


Tente isso ...

1.criar xml drawable (custom_layout.xml):

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >

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

<stroke
    android:width="2dp"
    android:color="#FF785C" />

<corners android:radius="10dp" />

</shape>

2.adicione seu fundo da vista

android:background="@drawable/custom_layout"

Uma maneira melhor de fazer isso seria:

background_activity.xml

<?xml version="1.0" encoding="UTF-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:gravity="fill">
        <color android:color="@color/black"/>
    </item>
    <item>
        <shape android:gravity="fill">
            <solid android:color="@color/white"/>
            <corners android:radius="10dip"/>
            <padding android:left="0dip" android:top="0dip" android:right="0dip" android:bottom="0dip" />
        </shape>
    </item>
</layer-list>

Isso funcionará abaixo da API 21 também e fornecerá algo assim:

Se você estiver disposto a fazer um pouco mais de controle, use android.support.v7.widget.CardView com seu atributo cardCornerRadius (e defina o atributo de elevation como 0dp para eliminar qualquer sombra adjacente com o cardView). Além disso, isso funcionará com um nível de API tão baixo quanto 15.


Use CardView na biblioteca de suporte do Android v7. Embora seja um pouco pesado, resolve todos os problemas e é bastante fácil. Não é como o método de fundo drawable set, poderia clip subviews com sucesso.

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    card_view:cardBackgroundColor="@android:color/transparent"
    card_view:cardCornerRadius="5dp"
    card_view:cardElevation="0dp"
    card_view:contentPadding="0dp">
    <YOUR_LINEARLAYOUT_HERE>
</android.support.v7.widget.CardView>

Para API 21+, use exibições de clipe

O recorte do contorno arredondado foi adicionado à classe View na API 21. Consulte este documento de treinamento ou esta reference para obter mais informações.

Este recurso embutido torna os cantos arredondados muito fáceis de implementar. Ele funciona em qualquer visualização ou layout e suporta um recorte adequado.

Aqui está o que fazer:

  • Crie uma forma arredondada desenhável e defina-a como plano de fundo da sua visualização: android:background="@drawable/round_outline"
  • De acordo com a documentação, então tudo que você precisa fazer é isto: android:clipToOutline="true"

Infelizmente, parece haver um bug e esse atributo XML atualmente não é reconhecido. Felizmente, podemos definir o recorte em Java:

  • Em sua atividade ou fragmento: View.setClipToOutline(true)

O que isso parece:

Nota especial sobre o ImageViews

setClipToOutline() só funciona quando o plano de fundo da View é definido como uma forma de desenhar. Se essa forma de plano de fundo existir, o modo de exibição exibirá o contorno do plano de fundo como as bordas para fins de recorte e sombreamento.

Isso significa que, se você quiser arredondar os cantos em um ImageView com setClipToOutline() , sua imagem deve vir de android:src vez de android:background (já que o plano de fundo é usado para a forma arredondada). Se você DEVE usar o background para definir sua imagem em vez de src, você pode usar esta solução alternativa de views aninhadas:

  • Crie um layout externo com seu plano de fundo definido para sua forma drawable
  • Enrole esse layout em torno do seu ImageView (sem preenchimento)
  • O ImageView (incluindo qualquer outra coisa no layout) será agora recortado na forma arredondada do layout externo.

 <shape xmlns:android="http://schemas.android.com/apk/res/android"
android:padding="@dimen/_10sdp"
android:shape="rectangle">

<solid android:color="@color/header" />

<corners
    android:bottomLeftRadius="@dimen/_5sdp"
    android:bottomRightRadius="@dimen/_5sdp"
    android:topLeftRadius="@dimen/_5sdp"
    android:topRightRadius="@dimen/_5sdp" />


<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="#FFFFFF"/>
    <stroke android:width="3dip" android:color="#B1BCBE" />
    <corners android:radius="10dip"/>
    <padding android:left="3dip" android:top="3dip" android:right="3dip" android:bottom="3dip" />
</shape>

@David, basta colocar o mesmo valor de preenchimento como traço, para que a borda possa ser visível, tamanho da imagem sem importância





layout