모 를 거 야. Coordinator Layout?
1. Coordinator Layout 는 어떤 역할 을 합 니까?
Coordinator Layout 는 "super - powered FrameLayout" 로 서 기본적으로 두 가지 기능 을 실현 합 니 다. 1. 최상 위 레이아웃 2 로 서 스케줄 조정 서브 레이아웃 을 사용 하려 면 Coordinator Layout 는 Gradle 에 Support Design Library 를 추가 해 야 합 니 다.
compile 'com.android.support:design:23.4.0'
2. Coordinator Layout 와 FloatingAction Button
레이아웃 파일 정의:
Coordinator Layout 는 "super - powered FrameLayout" 로 하위 보기 의 android: layot 를 설정 합 니 다.gravity 속성 제어 위치.Activity:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.fab).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar.make(view,"FAB",Snackbar.LENGTH_LONG)
.setAction("cancel", new View.OnClickListener() {
@Override
public void onClick(View v) {
// Action
}
})
.show();
}
});
}
}
효과:
fab.gif
FloatingAction Button 은 Coordinator Layout 를 가장 간단하게 사용 하 는 예 입 니 다. FloatingAction Button 은 기본적으로 FloatingAction Button. Behavior 를 사용 합 니 다.
3. Coordinator Layout 와 AppBarLayout
3.1 AppBarLayout 내장 TabLayout 레이아웃 파일 코드:
효과:
tab.gif
효과 표시, 보기 스크롤 시 Toolbar 가 숨겨 집 니 다. 이 효 과 는 Android Support Library 에 추 가 된 Coordinator Layout, AppBarLayout 에서 이 루어 집 니 다.1. scroll: 화면 을 굴 리 려 는 모든 view 는 이 flag 를 설정 해 야 합 니 다. 이 flag 를 설정 하지 않 은 view 는 화면 상단 에 고정 되 어 있 습 니 다.예 를 들 어 TabLayout 에서 이 값 을 설정 하지 않 으 면 화면 상단 에 머 물 것 입 니 다.2. enterAlways: 이 flag 를 설정 할 때 아래로 스크롤 하면 이 view 를 볼 수 있 습 니 다. 빠 른 '되 돌아 가기 모드' 를 사용 합 니 다.3. enterAlways Collapsed: 보기 가 minHeight 속성 을 설정 하고 이 플래그 를 사용 할 때 보 기 는 최소 높이 로 만 들 어 갈 수 있 습 니 다. 스크롤 보기 가 상단 에 도 착 했 을 때 만 전체 높이 로 확 대 됩 니 다.4. exit Until Collapsed: 스크롤 하여 화면 을 종료 하고 마지막 으로 맨 위 에 접 습 니 다.Toolbar 가 굴 러 갈 수 있 도록 Coordinator Layout 에 굴 러 갈 수 있 는 View 를 넣 습 니 다. 위의 예 와 같이 ViewPager 를 넣 었 고 ViewPager 에는 Recyler View 를 넣 었 습 니 다. 즉, 굴 러 갈 수 있 는 View 입 니 다.Coordinator Layout 에 포 함 된 하위 보기 에 스크롤 속성 이 있 는 View 를 설정 하려 면 app: layotbehavior 속성.예 를 들 어 예제 에서 Viewpager 는 이 속성 을 설정 했다.
app:layout_behavior="@string/appbar_scrolling_view_behavior"
Toolbar 가 미 끄 러 지 는 효 과 를 내기 위해 서 는 다음 과 같은 세 가 지 를 해 야 합 니 다.
……
효과:
collapsing.gif
이런 효 과 는 상세 한 페이지 에서 많이 사용 되 고 개성 화 된 내용 을 보 여 주 며 이미지 가 강 한 흡인력 을 가진다.이 효 과 는 Collapsing ToolbarLayout 에 중점 을 두 었 습 니 다.Collapsing Toolbar Layout 는 Toolbar 의 접 기 효 과 를 실현 할 수 있 습 니 다.CollapsingToolbarLayout 의 하위 보 기 는 LinearLayout 수직 방향 으로 배출 되 는 것 과 유사 합 니 다.CollapsingToolbarLayout 는 다음 과 같은 속성 과 방법 을 제공 합 니 다.
Coordinator Layout 는 layot 도 제공 합 니 다.anchor 의 속성, layotanchorGravity 와 함께 다른 보기 와 연 결 된 부유 보기 (예 를 들 어 FloatingActionButton) 를 배치 할 수 있 습 니 다.이 예 에 서 는 FloatingAction Button 을 사용 합 니 다.
아래 매개 변 수 를 통 해 FloatingAction Button 의 위 치 를 설정 하 였 으 며, 두 속성 이 공통 적 으로 작용 하여 FAB 부동 버튼 도 접 고 사라 지게 하여 보 여 줍 니 다.
app:layout_anchor="@id/appbar"
app:layout_anchorGravity="bottom|right|end"
CollapsingToolbarLayout 를 사용 하여 접 기 효 과 를 실현 하려 면 3 가지 주의 가 필요 합 니 다.
Coordinator Layout 의 기능 이 이렇게 강 한데 그의 신기 한 점 은 Behavior 대상 이다. Coordinator Layout 는 자신 이 View 를 통제 하지 않 고 모든 통제 권 이 Behavior 에 있다 는 것 이다.앞 에는 Floating Action Button. Behavior, AppBarLayout. Behavior, AppBarLayout. ScrollingView Behavior 라 고 적 혀 있 습 니 다.AppBarLayout 에는 두 개의 Behavior 가 있 는데 하 나 는 자신 에 게 사용 하 는 것 이 고 다른 하 나 는 형제 에 게 사용 하 는 것 이다.이 Behavior 들 은 복잡 한 통제 기능 을 실현 했다.시스템 의 Behavior 는 한계 가 있 기 때문에 우 리 는 사용자 정의 방식 으로 자신의 Behavior 를 실현 할 수 있다.
Coordinator Layout. Behavior (YourView. Behavior. class) 를 통 해 자신의 Behavior 를 정의 하고 layot 파일 에 app: layot 를 설정 합 니 다.behavior = "com. example. app. YourView $Behavior" 로 효 과 를 냅 니 다.
사용자 정의 Behavior 는 두 가지 방법 을 다시 써 야 합 니 다.
public boolean layoutDependsOn(CoordinatorLayout parent, View child, View dependency)
public boolean onDependentViewChanged(CoordinatorLayout parent, View child, View dependency)
아래 의 예 를 들 어 FloatingAction Button 을 누 르 면 90 도 회전 하고 Snackbar 에 적합 합 니 다.
public class RotateBehavior extends CoordinatorLayout.Behavior {
private static final String TAG = RotateBehavior.class.getSimpleName();
public RotateBehavior() {
}
public RotateBehavior(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean layoutDependsOn(CoordinatorLayout parent, FloatingActionButton child, View dependency) {
return dependency instanceof Snackbar.SnackbarLayout;
}
@Override
public boolean onDependentViewChanged(CoordinatorLayout parent, FloatingActionButton child, View dependency) {
float translationY = getFabTranslationYForSnackbar(parent, child);
float percentComplete = -translationY / dependency.getHeight();
child.setRotation(-90 * percentComplete);
child.setTranslationY(translationY);
return false;
}
private float getFabTranslationYForSnackbar(CoordinatorLayout parent,
FloatingActionButton fab) {
float minOffset = 0;
final List dependencies = parent.getDependencies(fab);
for (int i = 0, z = dependencies.size(); i < z; i++) {
final View view = dependencies.get(i);
if (view instanceof Snackbar.SnackbarLayout && parent.doViewsOverlap(fab, view)) {
minOffset = Math.min(minOffset,
ViewCompat.getTranslationY(view) - view.getHeight());
}
}
return minOffset;
}
}
레이아웃 파일:
효과 그림:
behavior.gif
위 설명 을 통 해 기본적으로 Coordinator Layout 의 사용 방식 을 덮어 씁 니 다.
여기 서 다시 한 번 감 사 드 립 니 다.http://blog.csdn.net/xyz_lmn/article/details/48055919
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.