Alors, comment pourrait-on implémenter le bouton circulaire présenté dans Android L? Quel est également le nom technique du bouton circulaire, le code XML serait apprécié.
Le bouton est appelé FAB (Floating Action Button), il est assez simple à réaliser.
Activity.Java
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layoutfab);
//Outline
int size = getResources().getDimensionPixelSize(R.dimen.fab_size);
Outline outline = new Outline();
outline.setOval(0, 0, size, size);
findViewById(R.id.fab).setOutline(outline);
}
}
anim.xml
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item
Android:state_enabled="true"
Android:state_pressed="true">
<objectAnimator
Android:duration="@Android:integer/config_shortAnimTime"
Android:propertyName="translationZ"
Android:valueFrom="@dimen/button_elevation"
Android:valueTo="@dimen/button_press_elevation"
Android:valueType="floatType" />
</item>
<item>
<objectAnimator
Android:duration="@Android:integer/config_shortAnimTime"
Android:propertyName="translationZ"
Android:valueFrom="@dimen/button_press_elevation"
Android:valueTo="@dimen/button_elevation"
Android:valueType="floatType" />
</item>
</selector>
dimens.xml
<resources>
<dimen name="fab_size">56dp</dimen>
<dimen name="button_elevation">2dp</dimen>
<dimen name="button_press_elevation">4dp</dimen>
</resources>
et votre fichier de mise en page pour définir le bouton FAB.
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
tools:context=".MainActivity">
<ImageButton
Android:id="@+id/fab"
Android:layout_alignParentRight="true"
Android:layout_alignParentBottom="true"
Android:layout_width="@dimen/fab_size"
Android:layout_height="@dimen/fab_size"
Android:layout_gravity="bottom|right"
Android:layout_marginRight="16dp"
Android:layout_marginBottom="16dp"
Android:background="@drawable/ripple"
Android:stateListAnimator="@anim/anim"
Android:src="@drawable/ic_action_add"
Android:elevation="4dp"
/>
</RelativeLayout>
Enfin, l'ondulation affecte lorsque vous appuyez sur le bouton. ripple.xml
<ripple xmlns:Android="http://schemas.Android.com/apk/res/Android" Android:color="?android:colorControlHighlight">
<item>
<shape Android:shape="oval">
<solid Android:color="?android:colorAccent" />
</shape>
</item>
</ripple>
Profitez de votre nouveau FAB. Veuillez garder à l'esprit que c'est pour Android L uniquement!
[~ # ~] modifier [~ # ~] Ceci a été mis à jour à: https://stackoverflow.com/a/24548910/4352176
Il existe un moyen plus simple et pour toutes les versions (v7):
<ImageButton style="@style/AppTheme"
Android:layout_width="60dp"
Android:layout_height="60dp"
Android:text="New Button"
Android:id="@+id/OkBt"
Android:elevation="10dp"
Android:src="@drawable/ic_keyboard_return_black_36dp"
Android:background="@drawable/circle" />
Regardez style = "@ style/AppTheme" Le style que j'ai défini pour l'ancienne version est:
<style name="AppTheme" parent="AppTheme.Base"/>
<style name="AppTheme.Base" parent="Theme.AppCompat.Light.DarkActionBar">
Pour Android Lollipop est:
<style name="AppTheme" parent="Android:Theme.Material.Light.DarkActionBar">
La forme que l'on peut dessiner pour le cercle est:
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:shape="oval">
<solid Android:color="#81D4FA"/>
</shape>
Cela fonctionne très bien pour tous Android, il crée automatiquement l'ombre du cercle dans Lollipop.
Vous devez définir un autre dessinable pour cela. C'est assez simple en fait, mais non documenté.
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:Android="http://schemas.Android.com/apk/res/Android" Android:color="?android:colorControlHighlight">
<item>
<shape Android:shape="oval">
<solid Android:color="?android:colorAccent" />
</shape>
</item>
</ripple>
Je l'ai obtenu ici: https://github.com/romainguy/google-io-2014/blob/7c174c7901d8cd2601807dcd17f3df7ed88fbee9/app/src/main/res/drawable/info_background.xml
N'oubliez pas de régler l'élévation et le contour