FloatingActionButton简称FAB。
 

一. 对于App或某个页面中是否要使用FloatingActionButton必要性:

    FAB代表一个App或一个页面中最主要的操作,如果一个App的每个页面都有FAB,则通常表示该App最主要的功能是通过该FAB操作的。

    为了突出FAB的重要性,一个页面最好只有一个FAB。

二. FloatingActionButton大小
    通常有两种尺寸
    1. 56 * 56dp :默认的大小,最常用的尺寸。
    2. 40 * 40 dp :Mini版。
    当然也可以改它的大小。
    FAB中间的图标,google推荐的大小是:24 * 24dp
 
三. 哪些操作推荐使用FloatingActionButton
   如: 添加,收藏,编辑,分享,导航等,如下图:
   
   而如:删除,警告,错误,剪切等操作,则不推荐使用FloatingActionButton
 
 
 
四. FAB的使用
 Android 5.0 中引入Material Design,FAB为Android Design Support Library支持包中的中Material Design控件,要使用FAB,先要引入Design Support Library包,如:在build.gradle中加入: compile 'com.android.support:design:X.X.X',X为支持包版本号,如下图:
 
 FAB的继承关系:
    
 
 FAB的XMl属性除了继承自View,ImageView的属性外,Android 5.0后引入的常用新属性如下:
    注:使用下面属性,先要引入命名空间:xmlns:app="http://schemas.android.com/apk/res-auto"
      1>   app:elevation="50dp":阴影的高度,elevation是Android 5.0中引入的新属性,设置该属性使控件有一个阴影,感觉该控件像是“浮”起来一样,这样达到3D效果。对应的方法:setCompatElevation(float)
      2>   app:fabSize="normal":FAB的大小,为normal时,大小为:56 * 56dp ,为mini时,大小为: 40 * 40 dp。
     3>  app:backgroundTint="#31bfcf":FAB的背景颜色。
     4>  app:rippleColor="#e7d16b":点击FAB时,形成的波纹颜色。
 
    <一> 使用例子1: 简单使用FAB
     点击“+”悬浮按钮,弹出悬浮按钮菜单,效果如下:
     代码如下:
     XMl布局:
 <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<CheckBox
android:id="@+id/cbDelay"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="delay"
android:layout_marginTop="10dp"
android:layout_marginLeft="10dp"
/>
<RelativeLayout
android:id="@+id/rlAddBill"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#80000000"
android:visibility="gone"
>
<LinearLayout
android:id="@+id/ll01"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_marginBottom="100dp"
android:orientation="horizontal"
>
<TextView
android:layout_toLeftOf="@+id/miniFab01"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="销售单"
android:textSize="15sp"
android:textColor="@android:color/white"
android:layout_gravity="center_vertical"
android:gravity="right"
android:paddingBottom="5dp"
/>
<android.support.design.widget.FloatingActionButton
android:id="@+id/miniFab01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/ic_list_white_24dp"
android:layout_marginRight="25dp"
app:fabSize="mini"
app:elevation="5dp"
app:backgroundTint="@color/color_XSD"
/>
</LinearLayout>
<LinearLayout
android:id="@+id/ll02"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_above="@+id/ll01"
>
<TextView
android:layout_toLeftOf="@+id/miniFab02"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="销售退货"
android:textSize="15sp"
android:textColor="@android:color/white"
android:layout_gravity="center_vertical"
android:gravity="right"
android:paddingBottom="5dp"
/>
<android.support.design.widget.FloatingActionButton
android:id="@+id/miniFab02"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/ic_list_white_24dp"
android:layout_marginRight="25dp"
app:fabSize="mini"
app:elevation="5dp"
app:backgroundTint="@color/color_XSTH"
/>
</LinearLayout>
<LinearLayout
android:id="@+id/ll03"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_above="@+id/ll02"
>
<TextView
android:layout_toLeftOf="@+id/miniFab02"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="收款单"
android:textSize="15sp"
android:textColor="@android:color/white"
android:layout_gravity="center_vertical"
android:gravity="right"
android:paddingBottom="5dp"
/>
<android.support.design.widget.FloatingActionButton
android:id="@+id/miniFab03"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/ic_list_white_24dp"
android:layout_marginRight="25dp"
app:fabSize="mini"
app:elevation="5dp"
app:backgroundTint="@color/color_SKD"
/>
</LinearLayout>
<LinearLayout
android:id="@+id/ll04"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_above="@+id/ll03"
>
<TextView
android:layout_toLeftOf="@+id/miniFab02"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="进货单"
android:textSize="15sp"
android:textColor="@android:color/white"
android:layout_gravity="center_vertical"
android:gravity="right"
android:paddingBottom="5dp"
/>
<android.support.design.widget.FloatingActionButton
android:id="@+id/miniFab04"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/ic_list_white_24dp"
android:layout_marginRight="25dp"
app:fabSize="mini"
app:elevation="5dp"
app:backgroundTint="@color/color_JHD"
/>
</LinearLayout>
<LinearLayout
android:id="@+id/ll05"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_above="@+id/ll04"
>
<TextView
android:layout_toLeftOf="@+id/miniFab02"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="采购退货"
android:textSize="15sp"
android:textColor="@android:color/white"
android:layout_gravity="center_vertical"
android:gravity="right"
android:paddingBottom="5dp"
/>
<android.support.design.widget.FloatingActionButton
android:id="@+id/miniFab05"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/ic_list_white_24dp"
android:layout_marginRight="25dp"
app:fabSize="mini"
app:elevation="5dp"
app:backgroundTint="@color/color_CGTH"
/>
</LinearLayout>
<LinearLayout
android:id="@+id/ll06"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_above="@+id/ll05"
>
<TextView
android:layout_toLeftOf="@+id/miniFab02"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="付款单"
android:textSize="15sp"
android:textColor="@android:color/white"
android:layout_gravity="center_vertical"
android:gravity="right"
android:paddingBottom="5dp"
/>
<android.support.design.widget.FloatingActionButton
android:id="@+id/miniFab06"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/ic_list_white_24dp"
android:layout_marginRight="25dp"
app:fabSize="mini"
app:elevation="5dp"
app:backgroundTint="@color/color_FKD"
/>
</LinearLayout>
</RelativeLayout>
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab01Add"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignParentBottom="true"
android:src="@mipmap/ic_add_white_24dp"
android:layout_marginRight="15dp"
android:layout_marginBottom="20dp"
app:fabSize="normal"
app:elevation="5dp"
app:backgroundTint="#31bfcf"
app:rippleColor="#e7d161"
/>
</RelativeLayout>

  Java代码:

 package com.zst.floatactionbutton;
import android.animation.Animator;
import android.animation.AnimatorInflater;
import android.animation.AnimatorSet;
import android.content.Intent;
import android.content.res.ColorStateList;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.design.widget.FloatingActionButton;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.WindowManager;
import android.widget.CheckBox;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
/**
* Created by shengtao_zeng on 2016/11/10.
*/
public class BasicFABActivity extends AppCompatActivity implements View.OnClickListener{
private CheckBox cbDelay;
private FloatingActionButton fab01Add;
private boolean isAdd = false;
private RelativeLayout rlAddBill;
private int[] llId = new int[]{R.id.ll01,R.id.ll02,R.id.ll03,R.id.ll04,R.id.ll05,R.id.ll06};
private LinearLayout[] ll = new LinearLayout[llId.length];
private int[] fabId = new int[]{R.id.miniFab01,R.id.miniFab02,R.id.miniFab03,R.id.miniFab04,R.id.miniFab05,R.id.miniFab06};
private FloatingActionButton[] fab = new FloatingActionButton[fabId.length];
private AnimatorSet addBillTranslate1;
private AnimatorSet addBillTranslate2;
private AnimatorSet addBillTranslate3;
private AnimatorSet addBillTranslate4;
private AnimatorSet addBillTranslate5;
private AnimatorSet addBillTranslate6;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.basic_fab_activity);
initView();
setDefaultValues();
bindEvents();
}
private void initView(){
cbDelay = (CheckBox)findViewById(R.id.cbDelay);
fab01Add = (FloatingActionButton)findViewById(R.id.fab01Add);
rlAddBill = (RelativeLayout)findViewById(R.id.rlAddBill);
for (int i = 0; i < llId.length;i++){
ll[i] = (LinearLayout)findViewById(llId[i]);
}
for (int i = 0;i < fabId.length; i++){
fab[i] = (FloatingActionButton)findViewById(fabId[i]);
}
}
private void setDefaultValues(){
addBillTranslate1 = (AnimatorSet) AnimatorInflater.loadAnimator(this,R.animator.add_bill_anim);
addBillTranslate2 = (AnimatorSet) AnimatorInflater.loadAnimator(this,R.animator.add_bill_anim);
addBillTranslate3 = (AnimatorSet) AnimatorInflater.loadAnimator(this,R.animator.add_bill_anim);
addBillTranslate4 = (AnimatorSet) AnimatorInflater.loadAnimator(this,R.animator.add_bill_anim);
addBillTranslate5 = (AnimatorSet) AnimatorInflater.loadAnimator(this,R.animator.add_bill_anim);
addBillTranslate6 = (AnimatorSet) AnimatorInflater.loadAnimator(this,R.animator.add_bill_anim);
}
private void bindEvents(){
fab01Add.setOnClickListener(this);
for (int i = 0;i < fabId.length; i++){
fab[i].setOnClickListener(this);
}
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.fab01Add:
fab01Add.setImageResource(isAdd ? R.mipmap.ic_add_white_24dp:R.mipmap.ic_close_white_24dp);
isAdd = !isAdd;
rlAddBill.setVisibility(isAdd ? View.VISIBLE : View.GONE);
if (isAdd) {
addBillTranslate1.setTarget(ll[0]);
addBillTranslate1.start();
addBillTranslate2.setTarget(ll[1]);
addBillTranslate2.setStartDelay(cbDelay.isChecked() ? 150 : 0);
addBillTranslate2.start();
addBillTranslate3.setTarget(ll[2]);
addBillTranslate3.setStartDelay(cbDelay.isChecked() ? 200 : 0);
addBillTranslate3.start();
addBillTranslate4.setTarget(ll[3]);
addBillTranslate4.setStartDelay(cbDelay.isChecked() ? 250 : 0);
addBillTranslate4.start();
addBillTranslate5.setTarget(ll[4]);
addBillTranslate5.setStartDelay(cbDelay.isChecked() ? 300 : 0);
addBillTranslate5.start();
addBillTranslate6.setTarget(ll[5]);
addBillTranslate6.setStartDelay(cbDelay.isChecked() ? 350 : 0);
addBillTranslate6.start();
}
break;
case R.id.miniFab01:
hideFABMenu();
break;
case R.id.miniFab02:
hideFABMenu();
break;
case R.id.miniFab03:
hideFABMenu();
break;
case R.id.miniFab04:
hideFABMenu();
break;
case R.id.miniFab05:
hideFABMenu();
break;
case R.id.miniFab06:
hideFABMenu();
break;
default:
break;
}
}
private void hideFABMenu(){
rlAddBill.setVisibility(View.GONE);
fab01Add.setImageResource(R.mipmap.ic_add_white_24dp);
isAdd = false;
}
}

  Property Animation定义:

 <?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:ordering="sequentially"
>
<set
android:ordering="together"
>
<objectAnimator
android:propertyName="translationY"
android:valueFrom="100.00"
android:valueTo="-50.00"
android:duration="100"
android:startOffset="0"
android:repeatCount="0"
android:valueType="floatType"
/>
<objectAnimator
android:propertyName="alpha"
android:valueFrom="0.00"
android:valueTo="1.00"
android:duration="100"
android:startOffset="0"
android:valueType="floatType"
android:repeatCount="0"
/>
<objectAnimator
android:propertyName="scaleY"
android:valueFrom="0.00"
android:valueTo="1.50"
android:duration="100"
android:startOffset="0"
android:valueType="floatType"
android:repeatCount="0"
/>
</set>
<set
android:ordering="together"
>
<objectAnimator
android:propertyName="translationY"
android:valueTo="0.00"
android:duration="100"
android:startOffset="0"
android:repeatCount="0"
android:valueType="floatType"
/>
<objectAnimator
android:propertyName="scaleY"
android:valueTo="1.0"
android:duration="100"
android:startOffset="0"
android:valueType="floatType"
android:repeatCount="0"
/>
</set>
</set>
 
 
    <二> 使用例子2: FAB和ListView 的结合使用
           效果如下:
                        
 
 
                            a>  ListView向下滚动时,添加联系人的悬浮按钮隐藏。
                            b>  ListView向上滚动时,添加联系人的悬浮按钮显示。
                            c>  ListView向下滚动1/4时,会显示“回到顶部”的悬浮按钮,点击该按钮,ListView显示的顶部Item返回到第一个Item。
                
       ListView滚动和FAB的隐藏/显示的关系逻辑如下图:
                            
     代码如下:
      XML布局:
 <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<ListView
android:id="@+id/lvContacts"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:divider="#80000000"
android:dividerHeight="1px"
>
</ListView>
<android.support.design.widget.FloatingActionButton
android:id="@+id/fabAddContact"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="16dp"
android:layout_marginRight="8dp"
android:src="@mipmap/ic_person_add_white_24dp"
app:fabSize="normal"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
/>
<android.support.design.widget.FloatingActionButton
android:id="@+id/fabUp"
android:layout_above="@+id/fabAddContact"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="16dp"
android:layout_marginRight="20dp"
android:src="@mipmap/ic_keyboard_arrow_up_white_24dp"
app:fabSize="mini"
android:layout_alignParentRight="true"
app:backgroundTint="#92be0a"
android:visibility="gone"
/>
</RelativeLayout>
    主逻辑代码:
 package com.zst.floatactionbutton;
import android.animation.AnimatorInflater;
import android.animation.AnimatorSet;
import android.content.Context;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.design.widget.FloatingActionButton;
import android.support.v7.app.AppCompatActivity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.List; public class FABInListViewActivity extends AppCompatActivity implements View.OnClickListener{
private ListView lvContacts;
private ContactsAdapter adapter;
private List<String> list = new ArrayList<>();
private long mNumber = 13812007799L;
private FloatingActionButton fabAddContact;
private FloatingActionButton fabUp;
private AnimatorSet mHideFAB;
private AnimatorSet mShowFAB;
private boolean FAB_VISIBLE = true;
private int mPreviousFirstVisibleItem; //记录前面第一个Item
private int mLastScrollY; //记录ListView中最上面的Item(View)的上一次顶部Y坐标()
private int mScrollThreshold = 2; //阈值:单位px
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fab_in_listview_activity);
initView();
setDefaultValues();
bindEvents();
}
private void initView(){
lvContacts = (ListView)findViewById(R.id.lvContacts);
fabAddContact = (FloatingActionButton)findViewById(R.id.fabAddContact);
fabUp = (FloatingActionButton)findViewById(R.id.fabUp);
}
private void setDefaultValues(){
for (int i = 0; i < 100;i++){
list.add("Contact" + i + "+" + (mNumber + i));
}
adapter = new ContactsAdapter(this,list);
lvContacts.setAdapter(adapter);
initAnimation();
}
private void initAnimation(){
mHideFAB = (AnimatorSet)AnimatorInflater.loadAnimator(this,R.animator.scroll_hide_fab);
mShowFAB = (AnimatorSet)AnimatorInflater.loadAnimator(this,R.animator.scroll_show_fab);
mHideFAB.setTarget(fabAddContact);
mShowFAB.setTarget(fabAddContact);
}
private void bindEvents(){
fabUp.setOnClickListener(this);
lvContacts.setOnScrollListener(new AbsListView.OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
// if(scrollState == AbsListView.OnScrollListener.SCROLL_STATE_IDLE) { //停止滚动
//showFAB();
// }
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
if(totalItemCount == 0) {
showFAB();
return;
}
//滚动过程中:ListView中最上面一个Item还是同一个Item
if(isSameRow(firstVisibleItem)) {
int newScrollY = getTopItemScrollY();
boolean isExceedThreshold = Math.abs(mLastScrollY - newScrollY) > mScrollThreshold;
if (isExceedThreshold) {
if (mLastScrollY > newScrollY && FAB_VISIBLE == true) {
FAB_VISIBLE = false;
hideFAB();
} else if(mLastScrollY < newScrollY && FAB_VISIBLE == false){
FAB_VISIBLE = true;
showFAB();
}
}
mLastScrollY = newScrollY;
} else {
if (firstVisibleItem > mPreviousFirstVisibleItem && FAB_VISIBLE == true){ //向下滚动
FAB_VISIBLE = false;
hideFAB();
} else if(firstVisibleItem < mPreviousFirstVisibleItem && FAB_VISIBLE == false){ //向上滚动
FAB_VISIBLE = true;
showFAB();
}
mLastScrollY = getTopItemScrollY();
mPreviousFirstVisibleItem = firstVisibleItem;
}
if (firstVisibleItem > (totalItemCount/4)) {
fabUp.setVisibility(View.VISIBLE);
} else {
fabUp.setVisibility(View.GONE);
}
}
});
}
private boolean isSameRow(int firstVisisbleItem){
return mPreviousFirstVisibleItem == firstVisisbleItem;
}
/**
* 滚动过程中,获得当前ListView中最上面的Item(View)的顶部的Y坐标(以px为单位)
* @return
*/
private int getTopItemScrollY() {
if (lvContacts == null || lvContacts.getChildAt(0) == null) return 0;
View topChild = lvContacts.getChildAt(0);
return topChild.getTop();
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.fabUp:
lvContacts.setSelection(0);
fabUp.setVisibility(View.GONE);
break;
default:
break;
}
}
private void hideFAB() {
mHideFAB.start();
}
private void showFAB(){
mShowFAB.start();
}
class ContactsAdapter extends BaseAdapter {
private Context mContext;
private List<String> list;
public ContactsAdapter(Context mContext,List<String> list) {
this.mContext = mContext;
this.list = list;
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
convertView = LayoutInflater.from(mContext).inflate(R.layout.contacts_item,null);
TextView tvName = (TextView)convertView.findViewById(R.id.tvName);
TextView tvNumber = (TextView)convertView.findViewById(R.id.tvNumber);
tvName.setText((list.get(position).split("\\+"))[0]);
tvNumber.setText((list.get(position).split("\\+"))[1]);
return convertView;
}
}
}

Property Animation定义如下

   scroll_hide_fab.xml:
 <?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:ordering="together"
>
<objectAnimator
android:propertyName="translationY"
android:valueTo="500.00"
android:duration="200"
android:startOffset="0"
android:repeatCount="0"
android:valueType="floatType"
/>
<objectAnimator
android:propertyName="alpha"
android:valueFrom="1.00"
android:valueTo="0.00"
android:duration="200"
android:startOffset="0"
android:valueType="floatType"
android:repeatCount="0"
/>
</set>

 scroll_show_fab.xml: 

 <?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:ordering="together"
>
<objectAnimator
android:propertyName="translationY"
android:valueTo="0.0"
android:duration="100"
android:startOffset="0"
android:repeatCount="0"
android:valueType="floatType"
/>
<objectAnimator
android:propertyName="alpha"
android:valueFrom="0.00"
android:valueTo="1.00"
android:duration="100"
android:startOffset="0"
android:valueType="floatType"
android:repeatCount="0"
/>
</set>
 
 

FloatingActionButton(悬浮按钮)使用学习<一>的更多相关文章

  1. 浅谈FloatingActionButton(悬浮按钮)

    一.介绍 这个类是继承自ImageView的,所以对于这个控件我们可以使用ImageView的所有属性 android.support.design.widget.FloatingActionButt ...

  2. FloatingActionButtonDemo【悬浮按钮的使用,顺带snackBar的使用】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 FloatingActionButton简称FAB. 一. 对于App或某个页面中是否要使用FloatingActionButton ...

  3. Android FloatingActionButton(FAB) 悬浮按钮

    FloatingActionButton 悬浮按钮                                                                            ...

  4. Android 5.0新控件——FloatingActionButton(悬浮按钮)

    Android 5.0新控件--FloatingActionButton(悬浮按钮) FloatingActionButton是5.0以后的新控件,一个悬浮按钮,之所以叫做悬浮按钮,主要是因为自带阴影 ...

  5. 013 Android ActionFloatingButton悬浮按钮组件与Snackbar组件使用

    1.导入ActionFloatingButton组件(点击下载按钮,安装组件) 2,.ImageView图片XML设置 <ImageView android:id="@+id/imag ...

  6. android ——悬浮按钮及可交互提示

    一.悬浮按钮 FloatingActionButton是Design Support中的一个控件,它会默认colorAccent作为按钮的颜色,还可以给按钮一个图标. 这是没有图标的,这是有图标的. ...

  7. 在TableView上添加悬浮按钮

    如果直接在TableVIewController上贴Button的话会导致这个会随之滚动,下面解决在TableView上实现位置固定悬浮按钮的两种方法: 1.在view上贴tableView,然后将悬 ...

  8. Android用悬浮按钮实现翻页效果

    今天给大家分享下自己用悬浮按钮点击实现翻页效果的例子. 首先,一个按钮要实现悬浮,就要用到系统顶级窗口相关的WindowManager,WindowManager.LayoutParams.那么在An ...

  9. 如何在TableView上添加悬浮按钮

    如果直接在TableVIewController上贴Button的话会导致这个会随之滚动,下面解决在TableView上实现位置固定悬浮按钮的两种方法: 1.在view上贴tableView,然后将悬 ...

随机推荐

  1. 安装docker以及问题解决办法

    1.使用官方推荐的方式安装 yum-utilsyum install -y yum-utils2.使用如下的命令设置稳定版的 repositoryyum-config-manager \    --a ...

  2. 巨坑npm run dev 报错 终于找到正确答案 Error: EPERM: operation not permitted, open '/data/public/build/css/add.p

    Windows10环境 npm run dev 报错  终于找到正确答案 Error: EPERM: operation not permitted, open '/data/public/build ...

  3. fiddler 应用

    一   pc 端抓取 例:本地调试代码,转换域名,请求网络数据 1:设置代理,以smart header 为例 ip为 127.0.0.1 端口与自己的fillder一致,注意将不代理的地址列表做修改 ...

  4. vbs脚本实现自动打字祝福&搞笑

    脚本祝福礼物 概述 听说抖音上流行一种用代码做程序表白的东西,,,, 当然我也不是要表白,,,, 但是好像蛮有意思的,,,, 于是,又学了一下vbs脚本,做了几个很不错的祝福脚本,不懂代码的可以直接戳 ...

  5. 使用PIA查找组件的PeopleSoft导航

    导航到企业组件>查找对象导航. 使用组件名称 使用页面名称 使用辅助页面名称 使用内容参考名称 只需输入对象名称,然后单击“搜索”即可.在这个例子中.我们知道组件名称即'PRCSDEFN',我们 ...

  6. libevent入门介绍

    libevent是之前看到的一个别人推荐的清凉级网络库,我就想了解一下它.今天下载到了一个人写的剖析系列,从结构和源码方面进行了简要分析.只是这个分析文章是2010年的,有点过时了(跟现在的libev ...

  7. VS2017Release+x64失败,LNK1104,无法打开文件"msvcprt.lib"

    采用VS2017+Qt5.10联合开发环境建立开发,将Qt的库包含到VS中使用VS2017的Debug+x64模式调试程序,通过并出现对应的EXE应用程序! 但是转换到Release+x64模式出现问 ...

  8. Centos7 编译测试工具 wrk bombardier iftop

    1.wrk 安装及使用----------------------------------------------------------------------------------------- ...

  9. Java基础-对象与类

    面向对象程序设计概述 面向对象的程序设计(简称OOP)时当今主流的程序设计范型,已经取代了"结构化"过程化程序设计开发技术,Java是完全面向对象的. 类 类设计构造对象的模板或蓝 ...

  10. cadence钻孔文件及光绘文件的生成

    完成PCB布线之后,需要生成钻孔文件和光绘文件交给PCB厂家制作PCB板,下面总结详细方法!