Android
FloatingActionButton
수색…
소개
플로팅 동작 버튼은 특별한 유형의 프로모션 된 동작에 사용되며 기본적으로 확장 된 소재로 화면에 애니메이션을 적용합니다. 그 안에있는 아이콘은 애니메이션으로 표시 될 수 있으며 FAB은 상대적인 중요성 때문에 다른 UI 요소와 다르게 움직일 수 있습니다. 플로팅 액션 버튼은 단순히 액션을 트리거하거나 어딘가를 탐색 할 수있는 애플리케이션의 기본 액션을 나타냅니다.
매개 변수
매개 변수 | 세부 묘사 |
---|---|
android.support.design:elevation | FAB의 표고 값. "@ [+] [package :] type / name"형식 또는 "? [package :] type / name"형식의 테마 속성에 대한 다른 리소스에 대한 참조 일 수 있습니다. |
android.support.design:fabSize | FAB의 크기. |
android.support.design:rippleColor | FAB의 리플 색상입니다. |
android.support.design:useCompatPadding | compat 패딩을 사용합니다. |
비고
플로팅 액션 버튼은 특별한 유형의 프로모션 액션에 사용됩니다. 그것들은 UI 위에 떠있는 원 모양의 아이콘으로 구별되며 모핑, 실행, 앵커 포인트 전송과 관련된 특별한 동작 동작을합니다.
가장 일반적인 동작을 나타 내기 위해 화면 당 하나의 플로팅 동작 버튼 만 권장됩니다.
FloatingActionButton
을 사용하기 전에 build.gradle
파일에 디자인 지원 라이브러리 종속성을 추가해야합니다.
dependencies {
compile 'com.android.support:design:25.1.0'
}
공식 문서 :
https://developer.android.com/reference/android/support/design/widget/FloatingActionButton.html
재질 설계 규격 :
https://material.google.com/components/buttons-floating-action-button.html
FAB를 레이아웃에 추가하는 방법
FloatingActionButton을 사용하려면 비고 섹션에서 설명한대로 build.gradle
파일에 종속성을 추가하기 build.gradle
됩니다.
그런 다음 레이아웃에 추가하십시오.
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
android:layout_margin="@dimen/fab_margin"
android:src="@drawable/my_icon" />
예 :
색깔
이보기의 배경색은 기본적으로 테마의 colorAccent입니다.
위의 그림에서 src
가 + 아이콘 (기본적으로 24x24 dp)을 app:backgroundTint="@color/your_colour"
전체 원의 배경색 을 얻으려면 app:backgroundTint="@color/your_colour"
사용할 수 있습니다 app:backgroundTint="@color/your_colour"
사용할 수있는 코드의 색상을 변경하려면,
myFab.setBackgroundTintList(ColorStateList.valueOf(your color in int));
눌려진 상태에서 FAB의 색상을 변경하려면
mFab.setRippleColor(your color in int);
포지셔닝
휴대 전화의 가장자리에서 최소 16dp, 태블릿 / 데스크톱에서 최소 24dp를 배치하는 것이 좋습니다.
참고 : 일단 FloatingActionButton
의 전체 영역을 커버하는 것을 제외하고 src를 설정하면 최상의 결과를 얻으려면 해당 이미지의 크기가 올바른지 확인하십시오.
기본 서클 크기는 56 x 56dp입니다.
미니 서클 크기 : 40 x 40dp
내부 아이콘 만 변경하려면 기본 크기로 24x24 아이콘을 사용하십시오
스 와이프에서 FloatingActionButton 표시 및 숨기기
FloatingActionButton
을 기본 애니메이션으로 표시하거나 숨기려면 show()
및 hide()
메서드를 호출하면됩니다. FloatingActionButton
을 Fragment에 배치하는 대신 Activity 레이아웃에 유지하는 것이 좋습니다. 이렇게하면 표시 및 숨길 때 기본 애니메이션이 작동 할 수 있습니다.
다음은 ViewPager
의 예입니다.
- 3 개의 탭
- 첫 번째 및 세 번째 탭에 대해
FloatingActionButton
표시 - 중간 탭에서
FloatingActionButton
숨기기
public class MainActivity extends AppCompatActivity {
FloatingActionButton fab;
ViewPager viewPager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
fab = (FloatingActionButton) findViewById(R.id.fab);
viewPager = (ViewPager) findViewById(R.id.viewpager);
// ...... set up ViewPager ............
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageSelected(int position) {
if (position == 0) {
fab.setImageResource(android.R.drawable.ic_dialog_email);
fab.show();
} else if (position == 2) {
fab.setImageResource(android.R.drawable.ic_dialog_map);
fab.show();
} else {
fab.hide();
}
}
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {}
@Override
public void onPageScrollStateChanged(int state) {}
});
// Handle the FloatingActionButton click event:
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int position = viewPager.getCurrentItem();
if (position == 0) {
openSend();
} else if (position == 2) {
openMap();
}
}
});
}
}
결과:
스크롤시 FloatingActionButton 표시 및 숨기기
Support Library 버전 22.2.1부터는 show()
및 hide()
메소드를 활용하는 FloatingActionButton.Behavior
하위 클래스를 사용하여 스크롤 동작에서 FloatingActionButton 을 표시하거나 숨길 수 있습니다.
이 옵션은 RecyclerView 및 NestedScrollView 와 같이 중첩 스크롤을 지원하는 내부 뷰와 함께 CoordinatorLayout 에서만 작동합니다.
이 ScrollAwareFABBehavior
클래스는 Android 가이드 ( Codepath)에서 가져온 것입니다 (기여가 필요한 cc-wiki 필요).
public class ScrollAwareFABBehavior extends FloatingActionButton.Behavior {
public ScrollAwareFABBehavior(Context context, AttributeSet attrs) {
super();
}
@Override
public boolean onStartNestedScroll(final CoordinatorLayout coordinatorLayout, final FloatingActionButton child,
final View directTargetChild, final View target, final int nestedScrollAxes) {
// Ensure we react to vertical scrolling
return nestedScrollAxes == ViewCompat.SCROLL_AXIS_VERTICAL
|| super.onStartNestedScroll(coordinatorLayout, child, directTargetChild, target, nestedScrollAxes);
}
@Override
public void onNestedScroll(final CoordinatorLayout coordinatorLayout, final FloatingActionButton child,
final View target, final int dxConsumed, final int dyConsumed,
final int dxUnconsumed, final int dyUnconsumed) {
super.onNestedScroll(coordinatorLayout, child, target, dxConsumed, dyConsumed, dxUnconsumed, dyUnconsumed);
if (dyConsumed > 0 && child.getVisibility() == View.VISIBLE) {
// User scrolled down and the FAB is currently visible -> hide the FAB
child.hide();
} else if (dyConsumed < 0 && child.getVisibility() != View.VISIBLE) {
// User scrolled up and the FAB is currently not visible -> show the FAB
child.show();
}
}
}
FloatingActionButton 레이아웃 XML에서 지정 app:layout_behavior
의 완전한 클래스 이름을 가진 ScrollAwareFABBehavior
:
app:layout_behavior="com.example.app.ScrollAwareFABBehavior"
예를 들어 다음 레이아웃을 사용합니다.
<android.support.design.widget.CoordinatorLayout
android:id="@+id/main_layout"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<android.support.design.widget.AppBarLayout
android:id="@+id/appBarLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:elevation="6dp">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:background="?attr/colorPrimary"
android:minHeight="?attr/actionBarSize"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
app:elevation="0dp"
app:layout_scrollFlags="scroll|enterAlways"
/>
<android.support.design.widget.TabLayout
android:id="@+id/tab_layout"
app:tabMode="fixed"
android:layout_below="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/colorPrimary"
app:elevation="0dp"
app:tabTextColor="#d3d3d3"
android:minHeight="?attr/actionBarSize"
/>
</android.support.design.widget.AppBarLayout>
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_below="@+id/tab_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
/>
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
app:layout_behavior="com.example.app.ScrollAwareFABBehavior"
android:layout_margin="@dimen/fab_margin"
android:src="@android:drawable/ic_dialog_email" />
</android.support.design.widget.CoordinatorLayout>
결과는 다음과 같습니다.
FloatingActionButton의 동작 설정
XML로 FAB의 동작을 설정할 수 있습니다.
예 :
<android.support.design.widget.FloatingActionButton
app:layout_behavior=".MyBehavior" />
또는 다음을 사용하여 프로그래밍 방식으로 설정할 수 있습니다.
CoordinatorLayout.LayoutParams p = (CoordinatorLayout.LayoutParams) fab.getLayoutParams();
p.setBehavior(xxxx);
fab.setLayoutParams(p);