注意:app命名空间的属性出不来,在color的xml文件上添加
<color name="main_color">#ffffff</color>
一、Snackbar:比较像Toast,setAction有点击事件
Snackbar.make(coordinator,"Snackbar",Snackbar.LENGTH_SHORT)
.setAction("撤销", new View.OnClickListener() {
@Override
public void onClick(View v) {
text.setText("撤销");
}
}).show();
二、CoordinatorLayout,获取view的LayoutParams属性,从而设置behavoir属性,,behavoir具有设置监听功能
2.1 SwipeDismissBehavior行为是通过alpha,translationX进行属性动画的删除,和回退
CoordinatorLayout.LayoutParams layoutParams = (CoordinatorLayout.LayoutParams) text.getLayoutParams();
SwipeDismissBehavior behavior=new SwipeDismissBehavior();
behavior.setListener(this);
layoutParams.setBehavior(behavior);
public void onDismiss(View view) {
text.setVisibility(View.GONE);
Snackbar.make(coordinator,"你删除了一个textview",Snackbar.LENGTH_LONG)
.setAction("撤销", new View.OnClickListener() {
@Override
public void onClick(View v) {
text.setVisibility(View.VISIBLE);
ViewCompat.setAlpha(text,1);
ViewCompat.setTranslationX(text,0);
}
}).show();
}
@Override
public void onDragStateChanged(int state) {
}
<android.support.v7.widget.Toolbar
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="@color/colorPrimary"
app:theme="@style/Base.ThemeOverlay.AppCompat.Dark.ActionBar"
android:id="@+id/main_toolbar">
setSupportActionBar(toolbar);
补充不是5.0、DrawerLayout,一般与NavigationView结合使用,否则没啥意义
3.1 不结合NavigationView使用,只能看到最下面一个veiw 的样子,而且宽高设置没有用,全部match_parent,和0dp都是撑满全屏
<android.support.v4.widget.DrawerLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:id="@+id/drawer_layout2">
<View
android:layout_width="0dp"
android:layout_height="0dp"
android:background="#00f"/>
<View
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#f00"/>
</android.support.v4.widget.DrawerLayout>
3.2 结合NavigationView使用,想从左边划入,必须设置android:layout_gravity=”start”属性,
<android.support.design.widget.NavigationView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="start"
app:headerLayout="@layout/content_header"
app:menu="@menu/menu_navigation"
app:itemIconTint="@color/color_menu_item"
app:itemTextColor="@color/color_menu_item"
app:itemTextAppearance="?android:textAppearanceLarge"
android:background="#fff">
</android.support.design.widget.NavigationView>
drawer = (DrawerLayout) findViewById(R.id.drawer_layout2);
ActionBarDrawerToggle actionBarDrawerToggle = new ActionBarDrawerToggle(this, drawer, toolbar, 0, 0);
drawer.setDrawerListener(actionBarDrawerToggle);
actionBarDrawerToggle.syncState();
drawer_layout = (DrawerLayout) findViewById(R.id.drawer_layout);
toggle=new ActionBarDrawerToggle(this,drawer_layout,0,0);
drawer_layout.setDrawerListener(toggle);
toggle.syncState();
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
@Override
public boolean onOptionsItemSelected(MenuItem item) {
return toggle.onOptionsItemSelected(item) || super.onOptionsItemSelected(item);
}
<android.support.design.widget.FloatingActionButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@android:drawable/ic_menu_add"
app:layout_anchor="@id/collapsing_toolbar3"
app:layout_anchorGravity="bottom|right|end"
android:layout_marginRight="5dp"
android:layout_marginBottom="5dp"
android:id="@+id/bar_button"/>
四、 NavigationView,xml见3,设置监听如下,这个监听是结合菜单的监听事件
navigationView.setNavigationItemSelectedListener(this);
@Override
public boolean onNavigationItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.item_1:
break;
case R.id.item_2:
break;
case R.id.item_3:
break;
case R.id.item_4:
break;
case R.id.item_5:
ActivityCompat.finishAffinity(this);
break;
}
drawer.closeDrawer(GravityCompat.START);
return false;
}
<android.support.design.widget.AppBarLayout
android:layout_height="192dp"
android:layout_width="match_parent">
<android.support.design.widget.CollapsingToolbarLayout
android:id="@+id/collapsing_toolbar3"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_scrollFlags="scroll|exitUntilCollapsed"
>
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar3"
android:layout_height="?attr/actionBarSize"
android:layout_width="match_parent"
app:layout_collapseMode="pin"/>
</android.support.design.widget.CollapsingToolbarLayout>
</android.support.design.widget.AppBarLayout>
<android.support.v7.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layoutManager="LinearLayoutManager"
//和AppBarLayout.ScrollingViewBehavior相匹配,用来通知AppBarLayout 这个特殊的view何时发生了滚动事件,这个behavior需要设置在触发事件(滚动)的view上
app:layout_behavior="@string/appbar_scrolling_view_behavior"
android:id="@+id/recycle">
</android.support.v7.widget.RecyclerView>
1、enterAlways: 一旦向上滚动这个view就可见。
2、enterAlwaysCollapsed: 顾名思义,这个flag定义的是何时进入(已经消失之后何时再次显示)。假设你定义了一个最小高度(minHeight)同时enterAlways也定义了,那么view将在到达这个最小高度的时候开始显示,并且从这个时候开始慢慢展开,当滚动到顶部的时候展开完。
3、exitUntilCollapsed: 同样顾名思义,这个flag时定义何时退出,当你定义了一个minHeight,这个view将在滚动到达这个最小高度的时候消失。
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:theme="@style/Base.ThemeOverlay.AppCompat.Dark.ActionBar"
android:id="@+id/appbar">
<android.support.design.widget.CollapsingToolbarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:contentScrim="@color/colorPrimary"
app:layout_scrollFlags="scroll|exitUntilCollapsed"
>
<ImageView
android:layout_width="match_parent"
android:layout_height="320dp"
android:src="@mipmap/ic_launcher"
app:layout_collapseMode="parallax"
/>
<android.support.v7.widget.Toolbar
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:layout_collapseMode="pin"
android:id="@+id/toolbar"/>
</android.support.design.widget.CollapsingToolbarLayout>
</android.support.design.widget.AppBarLayout>
CollapsingToolbarLayout collapsingToolbar = (CollapsingToolbarLayout) findViewById(R.id.collapsing_toolbar3);
collapsingToolbar.setTitle("cheeseName");
3、你还可以使用app:layout_collapseMode=”parallax”(以及使用app:layout_collapseParallaxMultiplier=”0.7”来设置视差因子)来实现视差滚动效果(比如CollapsingToolbarLayout里面的一个ImageView),这中情况和CollapsingToolbarLayout的app:contentScrim=”?attr/colorPrimary”属性一起配合更完美
<android.support.design.widget.TabLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:tabMode="fixed"
app:tabTextAppearance="@style/tabTextAppearance"
app:tabBackground="@color/colorPrimaryDark"
app:tabTextColor="#fff"
app:tabIndicatorHeight="0dp"
app:tabSelectedTextColor="@color/colorAccent"
app:tabIndicatorColor="@color/colorAccent"
android:id="@+id/tab"/>
八、TextInputLayout
<android.support.design.widget.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/text_input">
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="输入用户名"
android:id="@+id/edit_text"/>
</android.support.design.widget.TextInputLayout>
textInput = (TextInputLayout) findViewById(R.id.text_input);
edit.addTextChangedListener(this);
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
if (s.length() < 6) {
textInput.setError("用户名要大于6位");
textInput.setErrorEnabled(true);
} else {
textInput.setErrorEnabled(false);
}
}
自定义Behavior
public class MyBehavior extends FloatingActionButton.Behavior {
@Override
public void onNestedPreScroll(CoordinatorLayout coordinatorLayout, FloatingActionButton child, View target, int dx, int dy, int[] consumed) {
super.onNestedPreScroll(coordinatorLayout, child, target, dx, dy, consumed);
if (dy > 0) {
child.hide();
} else {
child.show();
}
}
@Override
public boolean onStartNestedScroll(CoordinatorLayout coordinatorLayout, FloatingActionButton child, View directTargetChild, View target, int nestedScrollAxes) {
return true;
}
}