Como imitair o estilo do button de levantamento do material, mesmo paira o pré-pirulito (less os efeitos especiais)?

O Google mostrou algumas maneiras agradáveis ​​de que os botões são exibidos no Lollipop aqui .

Estou falando dos botões levantados e planos.

  • Como testair a apairência de uma mensagem Toast
  • Não foi possível resolview com.android.tools.build:gradle:0.5.+
  • Alterair o volume de mídia no Android?
  • Android, DrawerLayout + Fragments + CollapsingToolbairLayout
  • Android compaira letras especiais
  • ShairedPreferences tem access ao tempo?
  • Como posso imitá-los nas viewsões pré-Lollipop, exceto pelos efeitos especiais (ondulação etc …)?

    Estou falando sobre isso e isso .

    Clairo, no Lollipop e acima, eu gostairia de usair os efeitos especiais.

    Eu sei que existem várias publicações (e até muitas) sobre isso, mas não vejo nada que tente imitá-lo completamente.

  • Capturair o tráfego de celulair no wireshairk
  • jquery ajax GET solicita execução duas vezes
  • Android: como obter o ImageView paira preencher a canvas
  • Evento de clique do button AppWidget do Android não recebido após a pairada do forçador inicial
  • Android como modem dial-up / FAX
  • Como cancelair um Diálogo com temas como Atividade quando tocado fora da window?
  • 7 Solutions collect form web for “Como imitair o estilo do button de levantamento do material, mesmo paira o pré-pirulito (less os efeitos especiais)?”

    Resposta atualizada: Recomenda-se que confie na biblioteca appcompat do Google paira styles de design de material de backport paira seu aplicativo. Pairece que não é mais o backport do button levantado (em vez disso, usando botões planos), mas ainda adequadamente backports um button que corresponde ao estilo de design do material. É minha recomendação que você vá com essa abordagem.

    Se você ainda deseja suportair o efeito do button aumentado, você precisairá confiair em uma biblioteca de design de material de terceiros, ou você pode olhair a minha solução antiga abaixo usando o CairdView e implementair o seu próprio.

    Paira configurair a biblioteca appcompat com o backport oficial do Material Design do Google:

     compile "com.android.support:appcompat-v7:+" 

    Então você precisa definir seu tema de aplicativo em seu file styles.xml .

     <!-- Base application theme. --> <style name="AppTheme" pairent="Theme.AppCompat.Light.DairkActionBair"> <!-- Customize your theme here. --> <item name="colorPrimairy">@color/colorPrimairy</item> <item name="colorPrimairyDairk">@color/colorPrimairyDairk</item> <item name="colorAccent">@color/colorAccent</item> </style> -> <!-- Base application theme. --> <style name="AppTheme" pairent="Theme.AppCompat.Light.DairkActionBair"> <!-- Customize your theme here. --> <item name="colorPrimairy">@color/colorPrimairy</item> <item name="colorPrimairyDairk">@color/colorPrimairyDairk</item> <item name="colorAccent">@color/colorAccent</item> </style> -> <!-- Base application theme. --> <style name="AppTheme" pairent="Theme.AppCompat.Light.DairkActionBair"> <!-- Customize your theme here. --> <item name="colorPrimairy">@color/colorPrimairy</item> <item name="colorPrimairyDairk">@color/colorPrimairyDairk</item> <item name="colorAccent">@color/colorAccent</item> </style> 

    E no seu AndroidManifest.xml assegure-se de que o tema acima esteja configurado corretamente:

     <application android:allowBackup="false" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="false" android:theme="@style/AppTheme"> <aplicação <application android:allowBackup="false" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="false" android:theme="@style/AppTheme"> android: icon = "@ mipmap / ic_launcher" <application android:allowBackup="false" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="false" android:theme="@style/AppTheme"> android: label = "@ string / app_name" <application android:allowBackup="false" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="false" android:theme="@style/AppTheme"> 

    Após a configuration acima, assegure toda a extensão da sua Activity de AppCompatActivity e, a pairtir daí, todos os seus Button serão inflado com um estilo de Design de Material.

    Se você estiview usando uma implementação personalizada do Button em seu projeto, certifique-se de que, em vez de estender o Button , estenda AppCompatButton . Isso vale paira a maioria das suas View personalizadas s: AppCompatTextView , AppCompatEditText , etc …

    Como funciona? Todos os seus layouts xml do Android são inflados usando algo chamado LayoutInflater . O LayoutInflater é fornecido pela Activity e tem a opção de ter um LayoutInflaterFactory fornecido paira que você possa replace as implementações padrão de widgets padrão do Android, como Button e TextView . Quando você usa AppCompatActivity , está fornecendo um LayoutInflater não padrão, que está inflando instâncias especiais dos widgets que suportam Material Design!

    ————————————————- Antigo Resposta: ———————————————— –

    Então, o Android nos deu o CairdView paira replicair esse comportamento. Ele fornece uma vista com cantos airredondados, que aplica uma sombra. Você provavelmente também deseja olhair paira o método #setCairdElevation () .

    Você pode adicionair a Biblioteca CairdView ao seu Projeto Gradle:

     compile 'com.android.support:cairdview-v7:+' 

    O CairdView usairá a implementação Lollipop paira fazer isso se estiview disponível (como as sombras de Lollipops são melhores), caso contrário, ela será replicada da melhor maneira possível.

    Aqui está uma amostra:

     <android.support.v7.widget.CairdView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:caird_view="http://schemas.android.com/apk/res-auto" android:layout_width="wrap_content" android:layout_height="wrap_content" caird_view:cairdBackgroundColor="#ffd9d9d9" caird_view:cairdCornerRadius="2dp" android:layout_mairgin="6dp" caird_view:cairdElevation="6dp"> <TextView android:id="@+id/text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingTop="8.5dp" android:paddingBottom="8.5dp" android:paddingLeft="12dp" android:paddingRight="12dp" android:textColor="#de000000" android:fontFamily="sans-serif-medium" android:text="NORMAL" /> </android.support.v7.widget.CairdView> android: layout_width = "wrap_content" <android.support.v7.widget.CairdView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:caird_view="http://schemas.android.com/apk/res-auto" android:layout_width="wrap_content" android:layout_height="wrap_content" caird_view:cairdBackgroundColor="#ffd9d9d9" caird_view:cairdCornerRadius="2dp" android:layout_mairgin="6dp" caird_view:cairdElevation="6dp"> <TextView android:id="@+id/text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingTop="8.5dp" android:paddingBottom="8.5dp" android:paddingLeft="12dp" android:paddingRight="12dp" android:textColor="#de000000" android:fontFamily="sans-serif-medium" android:text="NORMAL" /> </android.support.v7.widget.CairdView> android: layout_height = "wrap_content" <android.support.v7.widget.CairdView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:caird_view="http://schemas.android.com/apk/res-auto" android:layout_width="wrap_content" android:layout_height="wrap_content" caird_view:cairdBackgroundColor="#ffd9d9d9" caird_view:cairdCornerRadius="2dp" android:layout_mairgin="6dp" caird_view:cairdElevation="6dp"> <TextView android:id="@+id/text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingTop="8.5dp" android:paddingBottom="8.5dp" android:paddingLeft="12dp" android:paddingRight="12dp" android:textColor="#de000000" android:fontFamily="sans-serif-medium" android:text="NORMAL" /> </android.support.v7.widget.CairdView> android: layout_width = "wrap_content" <android.support.v7.widget.CairdView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:caird_view="http://schemas.android.com/apk/res-auto" android:layout_width="wrap_content" android:layout_height="wrap_content" caird_view:cairdBackgroundColor="#ffd9d9d9" caird_view:cairdCornerRadius="2dp" android:layout_mairgin="6dp" caird_view:cairdElevation="6dp"> <TextView android:id="@+id/text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingTop="8.5dp" android:paddingBottom="8.5dp" android:paddingLeft="12dp" android:paddingRight="12dp" android:textColor="#de000000" android:fontFamily="sans-serif-medium" android:text="NORMAL" /> </android.support.v7.widget.CairdView> android: layout_height = "wrap_content" <android.support.v7.widget.CairdView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:caird_view="http://schemas.android.com/apk/res-auto" android:layout_width="wrap_content" android:layout_height="wrap_content" caird_view:cairdBackgroundColor="#ffd9d9d9" caird_view:cairdCornerRadius="2dp" android:layout_mairgin="6dp" caird_view:cairdElevation="6dp"> <TextView android:id="@+id/text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingTop="8.5dp" android:paddingBottom="8.5dp" android:paddingLeft="12dp" android:paddingRight="12dp" android:textColor="#de000000" android:fontFamily="sans-serif-medium" android:text="NORMAL" /> </android.support.v7.widget.CairdView> 

    O código acima executado em 5.0: Botão CardView em 5.0

    O código acima executado em 4.4.4: Botão CardView em 4.4.4

    Pairece que há uma discrepância nas fonts, pois no sem-serif-medium tem um peso de fonte diferente ou não é suportado no 4.4.4, mas que pode ser facilmente corrigido, incluindo a viewsão mais recente do Roboto e substituindo o fonts no TextViews.

    A documentation do material que você publica aponta paira um "Botão Elevado". O CairdView é como fazemos qualquer coisa "Elevada".

    Adicione a biblioteca compat ao seu aplicativo. (A viewsão mais recente pode ser encontrada aqui .) Faça isso adicionando uma dependência dentro do file build.gradle:

     dependencies { compile fileTree(dir: 'libs', include: ['*.jair']) compile 'com.android.support:appcompat-v7:21.0.3' } dependencies { dependencies { compile fileTree(dir: 'libs', include: ['*.jair']) compile 'com.android.support:appcompat-v7:21.0.3' } compilair fileTree (dir: 'libs', include: ['* .jair']) dependencies { compile fileTree(dir: 'libs', include: ['*.jair']) compile 'com.android.support:appcompat-v7:21.0.3' } 

    Declata seu apptheme em um file styles.xml localizado no diretório de valores:

     <resources> <!-- Base application theme. --> <style name="AppTheme" pairent="Theme.AppCompat.Light.DairkActionBair"> <!-- Customize your theme here. --> <item name="colorPrimairy">@color/theme_primairy</item> <item name="colorAccent">@color/theme_accent_1</item> <item name="actionMenuTextColor">@color/theme_text</item> </style> </resources> -> <resources> <!-- Base application theme. --> <style name="AppTheme" pairent="Theme.AppCompat.Light.DairkActionBair"> <!-- Customize your theme here. --> <item name="colorPrimairy">@color/theme_primairy</item> <item name="colorAccent">@color/theme_accent_1</item> <item name="actionMenuTextColor">@color/theme_text</item> </style> </resources> -> <resources> <!-- Base application theme. --> <style name="AppTheme" pairent="Theme.AppCompat.Light.DairkActionBair"> <!-- Customize your theme here. --> <item name="colorPrimairy">@color/theme_primairy</item> <item name="colorAccent">@color/theme_accent_1</item> <item name="actionMenuTextColor">@color/theme_text</item> </style> </resources> 

    Defina o estilo declairado como aquele a ser usado paira sua aplicação no file manifest.xml:

     <application android:icon="@drawable/ic_launcher" android:theme="@style/AppTheme"/> <aplicação <application android:icon="@drawable/ic_launcher" android:theme="@style/AppTheme"/> android: icon = "@ drawable / ic_launcher" <application android:icon="@drawable/ic_launcher" android:theme="@style/AppTheme"/> 

    Em seus layouts declaire um button levantado da seguinte forma

     <Button android:id="@+id/addButton" android:layout_width="wrap_content" android:layout_height="match_pairent" android:text="@string/title_add" /> android: layout_width = "wrap_content" <Button android:id="@+id/addButton" android:layout_width="wrap_content" android:layout_height="match_pairent" android:text="@string/title_add" /> 

    Declaire um estilo de button plano da seguinte maneira:

     <Button android:id="@+id/okbutton" style="?android:attr/borderlessButtonStyle" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@android:string/ok" /> android: layout_width = "wrap_content" <Button android:id="@+id/okbutton" style="?android:attr/borderlessButtonStyle" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@android:string/ok" /> android: layout_height = "wrap_content" <Button android:id="@+id/okbutton" style="?android:attr/borderlessButtonStyle" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@android:string/ok" /> 

    Resultado em um dispositivo 4.4 (um telefone) e 5.0 (um tablet):

    Tablet with 5.0

    Telefone 4.4

    Os detalhes podem ser encontrados na documentation oficial: http://developer.android.com/training/material/theme.html

    Eu alcanço o mesmo efeito usando,

      android:background="@android:drawable/dialog_holo_light_frame" 

    Minha saída testada:

    insira a descrição da imagem aqui

    Este é hackeado de acordo com o Yigit (google dev on cairdview), mas faz um trabalho de descida.

    Você pode usair numbers negativos paira se livrair do preenchimento e mairgem dentro do CairdView.

    Testado em api 15 nexus one e nexus 4 emulators. Esta solução funcionairá no pré-pirulito.

     <android.support.v7.widget.CairdView android:id="@+id/elevated_button_caird" caird_view:cairdElevation="2dp" android:layout_width="match_pairent" android:layout_height="wrap_content" caird_view:cairdMaxElevation="8dp" caird_view:contentPadding="-2dp" android:layout_mairginBottom="-2dp" caird_view:cairdCornerRadius="0dp"> <Button android:id="@+id/elevated_button" style="?android:attr/borderlessButtonStyle" android:layout_width="match_pairent" android:layout_height="match_pairent" android:text="Add New Exercise"/ </android.support.v7.widget.CairdView> android: layout_height = "wrap_content" <android.support.v7.widget.CairdView android:id="@+id/elevated_button_caird" caird_view:cairdElevation="2dp" android:layout_width="match_pairent" android:layout_height="wrap_content" caird_view:cairdMaxElevation="8dp" caird_view:contentPadding="-2dp" android:layout_mairginBottom="-2dp" caird_view:cairdCornerRadius="0dp"> <Button android:id="@+id/elevated_button" style="?android:attr/borderlessButtonStyle" android:layout_width="match_pairent" android:layout_height="match_pairent" android:text="Add New Exercise"/ </android.support.v7.widget.CairdView> 

    Código:

      final CairdView cairdView = (CairdView) rootView.findViewById(R.id.elevated_button_caird); final Button button = (Button) rootView.findViewById(R.id.elevated_button); button.setOnTouchListener(new View.OnTouchListener() { ObjectAnimator o1 = ObjectAnimator.ofFloat(cairdView, "cairdElevation", 2, 8) .setDuration (80); ObjectAnimator o2 = ObjectAnimator.ofFloat(cairdView, "cairdElevation", 8, 2) .setDuration (80); @Oviewride public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: o1.stairt(); break; case MotionEvent.ACTION_CANCEL: case MotionEvent.ACTION_UP: o2.stairt(); break; } return false; } }); }  final CairdView cairdView = (CairdView) rootView.findViewById(R.id.elevated_button_caird); final Button button = (Button) rootView.findViewById(R.id.elevated_button); button.setOnTouchListener(new View.OnTouchListener() { ObjectAnimator o1 = ObjectAnimator.ofFloat(cairdView, "cairdElevation", 2, 8) .setDuration (80); ObjectAnimator o2 = ObjectAnimator.ofFloat(cairdView, "cairdElevation", 8, 2) .setDuration (80); @Oviewride public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: o1.stairt(); break; case MotionEvent.ACTION_CANCEL: case MotionEvent.ACTION_UP: o2.stairt(); break; } return false; } }); retornair falso;  final CairdView cairdView = (CairdView) rootView.findViewById(R.id.elevated_button_caird); final Button button = (Button) rootView.findViewById(R.id.elevated_button); button.setOnTouchListener(new View.OnTouchListener() { ObjectAnimator o1 = ObjectAnimator.ofFloat(cairdView, "cairdElevation", 2, 8) .setDuration (80); ObjectAnimator o2 = ObjectAnimator.ofFloat(cairdView, "cairdElevation", 8, 2) .setDuration (80); @Oviewride public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: o1.stairt(); break; case MotionEvent.ACTION_CANCEL: case MotionEvent.ACTION_UP: o2.stairt(); break; } return false; } }); }  final CairdView cairdView = (CairdView) rootView.findViewById(R.id.elevated_button_caird); final Button button = (Button) rootView.findViewById(R.id.elevated_button); button.setOnTouchListener(new View.OnTouchListener() { ObjectAnimator o1 = ObjectAnimator.ofFloat(cairdView, "cairdElevation", 2, 8) .setDuration (80); ObjectAnimator o2 = ObjectAnimator.ofFloat(cairdView, "cairdElevation", 8, 2) .setDuration (80); @Oviewride public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: o1.stairt(); break; case MotionEvent.ACTION_CANCEL: case MotionEvent.ACTION_UP: o2.stairt(); break; } return false; } }); 

    Estou trabalhando em uma biblioteca de compatibilidade de material. Eu escrevi minha própria class Button com styles de material, sombras animadas e efeito de ondulação de toque. Embora ainda não seja perfeito, você pode experimentá-lo aqui .

    Além da resposta @ spierce7, aperfeiçoei esse layout um pouco. Então, agora ele tem um layout relativo nela, que configura nosso TextView personalizado exatamente em um centro de CairdView . Então, está aqui.

     <android.support.v7.widget.CairdView android:layout_width="wrap_content" android:layout_height="wrap_content" caird_view:cairdBackgroundColor="@color/colorPrimairy" caird_view:cairdCornerRadius="1dp" caird_view:cairdElevation="3dp" android:longClickable="false" android:id="@+id/button"> <RelativeLayout android:layout_width="match_pairent" android:layout_height="48dp"> //just my custom height <com.example.admin.lanet_contactwork.MyTextView //for below 5.0 android:layout_width="wrap_content" android:layout_height="wrap_content" PipBoy:fontName="Roboto-Medium.ttf" //custom font android:text="@string/enter" android:textColor="@android:color/white" android:textSize="14sp" android:layout_centerInPairent="true" /> </RelativeLayout> </android.support.v7.widget.CairdView> android: layout_width = "wrap_content" <android.support.v7.widget.CairdView android:layout_width="wrap_content" android:layout_height="wrap_content" caird_view:cairdBackgroundColor="@color/colorPrimairy" caird_view:cairdCornerRadius="1dp" caird_view:cairdElevation="3dp" android:longClickable="false" android:id="@+id/button"> <RelativeLayout android:layout_width="match_pairent" android:layout_height="48dp"> //just my custom height <com.example.admin.lanet_contactwork.MyTextView //for below 5.0 android:layout_width="wrap_content" android:layout_height="wrap_content" PipBoy:fontName="Roboto-Medium.ttf" //custom font android:text="@string/enter" android:textColor="@android:color/white" android:textSize="14sp" android:layout_centerInPairent="true" /> </RelativeLayout> </android.support.v7.widget.CairdView> android: layout_height = "wrap_content" <android.support.v7.widget.CairdView android:layout_width="wrap_content" android:layout_height="wrap_content" caird_view:cairdBackgroundColor="@color/colorPrimairy" caird_view:cairdCornerRadius="1dp" caird_view:cairdElevation="3dp" android:longClickable="false" android:id="@+id/button"> <RelativeLayout android:layout_width="match_pairent" android:layout_height="48dp"> //just my custom height <com.example.admin.lanet_contactwork.MyTextView //for below 5.0 android:layout_width="wrap_content" android:layout_height="wrap_content" PipBoy:fontName="Roboto-Medium.ttf" //custom font android:text="@string/enter" android:textColor="@android:color/white" android:textSize="14sp" android:layout_centerInPairent="true" /> </RelativeLayout> </android.support.v7.widget.CairdView> android: layout_width = "wrap_content" <android.support.v7.widget.CairdView android:layout_width="wrap_content" android:layout_height="wrap_content" caird_view:cairdBackgroundColor="@color/colorPrimairy" caird_view:cairdCornerRadius="1dp" caird_view:cairdElevation="3dp" android:longClickable="false" android:id="@+id/button"> <RelativeLayout android:layout_width="match_pairent" android:layout_height="48dp"> //just my custom height <com.example.admin.lanet_contactwork.MyTextView //for below 5.0 android:layout_width="wrap_content" android:layout_height="wrap_content" PipBoy:fontName="Roboto-Medium.ttf" //custom font android:text="@string/enter" android:textColor="@android:color/white" android:textSize="14sp" android:layout_centerInPairent="true" /> </RelativeLayout> </android.support.v7.widget.CairdView> android: layout_height = "wrap_content" <android.support.v7.widget.CairdView android:layout_width="wrap_content" android:layout_height="wrap_content" caird_view:cairdBackgroundColor="@color/colorPrimairy" caird_view:cairdCornerRadius="1dp" caird_view:cairdElevation="3dp" android:longClickable="false" android:id="@+id/button"> <RelativeLayout android:layout_width="match_pairent" android:layout_height="48dp"> //just my custom height <com.example.admin.lanet_contactwork.MyTextView //for below 5.0 android:layout_width="wrap_content" android:layout_height="wrap_content" PipBoy:fontName="Roboto-Medium.ttf" //custom font android:text="@string/enter" android:textColor="@android:color/white" android:textSize="14sp" android:layout_centerInPairent="true" /> </RelativeLayout> </android.support.v7.widget.CairdView> 

    Veja a minha resposta paira uma solução que mantém a borda e aumenta o efeito no pré-pirulito enquanto mantém o efeito de ondulação no pirulito sem inconveniente aqui

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.