안 드 로 이 드 멋 진 상단 표시 줄 구현
도구 모음
Toolbar 는 Android 5.0 에서 출시 되 기 시작 한 Material Design 스타일 의 네 비게 이 션 컨트롤 입 니 다.Google 은 이전의 Actionbar 대신 Toolbar 를 사용 하 는 것 을 추천 합 니 다.즉,ActionBar 가 할 수 있 는 것 은 Toolbar 가 할 수 있 는 것 입 니 다.액 션 바 에 비해 툴 바 는 훨씬 유연 하 다.이것 은 Actionbar 처럼 반드시 Activity 의 상단 에 고정 시 키 지 않 고 인터페이스의 임 의 위치 에 놓 을 수 있다.이외에 도 툴 바 를 디자인 할 때 Google 은 수정 할 수 있 는 여 지 를 많이 남 겨 주 었 습 니 다.
•탐색 표시 줄 아이콘 설정
•App 로고 설정
•제목 과 하위 제목 설정
•하나 이상 의 사용자 정의 컨트롤 추가
•액 션 메뉴 설정
쉽게 이해 하기 위해 서 효과 도 를 살 펴 보 자.
효과 도 에 따 르 면 왼쪽 에서 오른쪽으로 네 비게 이 션 표시 줄 아이콘,App 의 로고,제목 과 하위 제목,사용자 정의 컨트롤(TextView 와 ImageView)과 Action Menu 가 있 습 니 다.
1.툴 바 를 사용 할 때 는 먼저 원래 의 ActionBar 를 숨겨 야 합 니 다.
(1)styles.xml 파일 의 AppTheme 탭 에 다음 속성 을 설정 합 니 다.
(2)저희 가 계승 한 주 제 는 Theme.AppCompat.Light.NoAction Bar 입 니 다.
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorPrimary">@color/blue</item>
<item name="colorPrimaryDark">@color/blue_dark</item>
<item name="colorAccent">@color/red</item>
<item name="textAllCaps">false</item>
</style>
(3)Activity 에서 다음 문장 을 호출 하여 기본 탐색 표시 줄 을 제거 합 니 다.supportRequestWindowFeature(Window.FEATURE_NO_TITLE);
2.레이아웃 파일 에 우리 가 필요 로 하 는 Toolbar 컨트롤 을 추가 합 니 다.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?android:actionBarSize"
android:background="?attr/colorPrimary">
<!-- -->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=" " />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="2dp"
android:src="@mipmap/icon" />
</android.support.v7.widget.Toolbar>
</LinearLayout>
3、이어서 menumain.xml 에 action menu 메뉴 항목 추가
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/add"
android:icon="@mipmap/icon_add"
app:showAsAction="always" />
<item
android:id="@+id/add_friend"
android:title=" "
app:showAsAction="never" />
<item
android:id="@+id/scace"
android:title=" "
app:showAsAction="never" />
</menu>
4.Activity 에서 Toolbar 컨트롤 을 초기 화하 고 해당 하 는 속성 을 설정 합 니 다.
package per.lijuan.appbarlayoutdome;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
import android.view.Window;
import android.widget.Toast;
/**
* Created by lijuan on 2016/8/31.
*/
public class Activity extends AppCompatActivity {
private Toolbar toolbar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
supportRequestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_second);
toolbar = (Toolbar) findViewById(R.id.toolbar);
/**
*
*/
toolbar.setTitle(" ");
/**
*
*/
toolbar.setSubtitle(" ");
/**
* App logo
*/
toolbar.setLogo(R.mipmap.ic_launcher);
/**
*
*/
toolbar.setNavigationIcon(R.mipmap.back);
setSupportActionBar(toolbar);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
/**
* o
*
* @return
*/
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
finish();
break;
case R.id.add:
Toast.makeText(SecondActivity.this, " ", Toast.LENGTH_SHORT).show();
break;
case R.id.add_friend:
Toast.makeText(SecondActivity.this, " ", Toast.LENGTH_SHORT).show();
break;
case R.id.scace:
Toast.makeText(SecondActivity.this, " ", Toast.LENGTH_SHORT).show();
break;
default:
break;
}
return super.onOptionsItemSelected(item);
}
}
2.Collapsing ToolbarLayoutCollapsing Toolbar Layout 역할 은 접 을 수 있 는 Toolbar 를 제공 합 니 다.FrameLayout 에 계승 하여 layot 를 설정 합 니 다.scrollFlags,Collapsing Toolbar Layout 에 포 함 된 컨트롤(예:ImageView,Toolbar)이 layot 에 응답 하 는 것 을 제어 할 수 있 습 니 다.behavior 이벤트 에 해당 하 는 scrollFlags 스크롤 이벤트(화면 을 제거 하거나 화면 맨 위 에 고정)
3.AppBarLayout
최종 효과 도 를 살 펴 보 자.
효과 도 를 보면 layot 가 설정 되 어 있 을 때behavior 컨트롤 이 CollapsingToolbarLayout 의 layot 에 응답 합 니 다.scrollFlags 이벤트 때 ImageView 는 시차 효과 가 있 는 위로 스크롤 하여 화면 을 제거 합 니 다.접 기 시작 할 때 Collapsing Toolbar Layout 의 배경 색(즉,Toolbar 의 배경 색)은 우리 가 설정 한 배경 색 으로 변 하고 Toolbar 도 항상 맨 위 에 고정 합 니 다.
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout 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">
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
<android.support.design.widget.CollapsingToolbarLayout
android:id="@+id/collapsing_toolbar_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:contentScrim="#3F51B5"
app:layout_scrollFlags="scroll|exitUntilCollapsed">
<ImageView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:src="@mipmap/icon_bg"
app:layout_collapseMode="parallax"
app:layout_collapseParallaxMultiplier="0.5" />
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="56dp"
app:layout_collapseMode="pin"
app:title="@string/app_name"
app:titleTextColor="#FFFFFF" />
</android.support.design.widget.CollapsingToolbarLayout>
</android.support.design.widget.AppBarLayout>
<android.support.v7.widget.RecyclerView
android:id="@+id/recyclerview"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
</android.support.design.widget.CoordinatorLayout>
(1)저 희 는 Collapsing Toolbar Layout 에 ImageView 와 Toolbar 를 설정 하고 이 Collapsing Toolbar Layout 를 하나의 전체 로 AppBarLayout 에 두 었 습 니 다.(2)Collapsing ToolbarLayout 에서 app:layot 을 설 치 했 습 니 다.scrollFlags="scroll|enterAlways Collapsed"값 은 다음 과 같 습 니 다.
•스크롤-스크롤 하려 면 이것 을 설정 해 야 합 니 다.즉,값 을 스크롤 로 설정 한 View 는 스크롤 이벤트 와 함께 스크롤 합 니 다.
◦enterAlways-값 은 enterAlways 의 View 로 설정 되 어 있 으 며,RecyclerView 가 아래로 굴 러 갈 때 이 View 는 바로 아래로 굴 러 갑 니 다.
◦exit UntilCollapsed-값 은 exit UntilCollapsed View 로 설정 되 어 있 으 며,이 View 가 위로 점점'사라 짐'될 때 까지 계속 위로 미 끄 러 지 며,나머지 높이 가 최소 높이 에 이 를 때 까지 RecyclerView 의 내부 미끄럼 이벤트 에 응답 합 니 다.
◦enterAlways Collapsed-enterAlways Collapsed 로 설 정 된 View 가 minHeight 속성 을 설정 하고 이 플래그 를 사용 할 때 이 View 는 최소 높이 로 만 들 어 갈 수 있 습 니 다.스크롤 보기 가 상단 에 도 착 했 을 때 만 전체 높이 로 확 대 됩 니 다.
또한 app:contentScrim="\#3F51B 5"는 완전 Collapsing ToolbarLayout 접 기(수축)후의 배경 색 을 말 합 니 다.
(3)ImageView 컨트롤 에 app:layout 을 설 정 했 습 니 다.collapseMode="parallax",layout_collapse Mode(접 기 모드)-두 개의 값 이 있 습 니 다.
•pin-이 모드 로 설정 되 었 을 때 Collapsing Toolbar Layout 가 완전히 수축 되면 Toolbar 는 화면 에 남 길 수 있 습 니 다.
•parallax-이 모드 로 설정 되 었 을 때 내용 이 굴 러 갈 때 Collapsing ToolbarLayout 의 View(예 를 들 어 ImageView)도 동시에 굴 러 시차 스크롤 효 과 를 실현 할 수 있 습 니 다.보통 layotcollapseParallax Multiplier(시차 인자 설정)조합 사용
다른 app:layoutcollapseParallax Multiplier="0.5"시차 스크롤 인 자 를 설정 합 니 다.값 은 0~1 입 니 다.
(4)Toolbar 컨트롤 에 layot 를 설 치 했 습 니 다.collapse Mode(접 기 모드):pin
MainActivity.class
package com.per.appbarlayout;
import android.graphics.Color;
import android.os.Bundle;
import android.support.design.widget.CollapsingToolbarLayout;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
public Toolbar mToolbar;
private RecyclerView mRecyclerView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mToolbar = (Toolbar) findViewById(R.id.toolbar);
mToolbar.setTitleTextColor(Color.GREEN);
mToolbar.setTitle("AppBarLayout");
setSupportActionBar(mToolbar);
getSupportActionBar().setHomeButtonEnabled(true);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
mRecyclerView = (RecyclerView) findViewById(R.id.recyclerview);
mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
mRecyclerView.setAdapter(new ContentAdapter());
CollapsingToolbarLayout mCollapsingToolbarLayout = (CollapsingToolbarLayout) findViewById(R.id.collapsing_toolbar_layout);
// CollapsingToolbarLayout title
mCollapsingToolbarLayout.setTitle("AppBarLayout");
// CollapsingToolbarLayout
mCollapsingToolbarLayout.setExpandedTitleColor(Color.WHITE);//
mCollapsingToolbarLayout.setCollapsedTitleTextColor(Color.RED);// Toolbar
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
finish();
break;
}
return super.onOptionsItemSelected(item);
}
private class ContentAdapter extends RecyclerView.Adapter<ContentAdapter.ContentHolder> {
@Override
public ContentAdapter.ContentHolder onCreateViewHolder(ViewGroup parent, int viewType) {
return new ContentHolder(LayoutInflater.from(MainActivity.this).inflate(android.R.layout.simple_list_item_1, parent, false));
}
@Override
public void onBindViewHolder(ContentAdapter.ContentHolder holder, int position) {
holder.itemTv.setText("item");
}
@Override
public int getItemCount() {
return 35;
}
class ContentHolder extends RecyclerView.ViewHolder {
private TextView itemTv;
public ContentHolder(View itemView) {
super(itemView);
itemTv = (TextView) itemView.findViewById(android.R.id.text1);
}
}
}
}
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.