1.ToolBar
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
supportRequestWindowFeature(Window.FEATURE_NO_TITLE); //必须在setContentView之前
setContentView(R.layout.activity_tool_bar);
mTool = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(mTool);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater menuInflater = getMenuInflater();
menuInflater.inflate(R.menu.tool_menu,menu);
MenuItem item1 = menu.findItem(R.id.lover1);
MenuItem item2 = menu.findItem(R.id.lover2);
MenuItem item3 = menu.findItem(R.id.lover3);
item1.setTitle("心情好");
SpannableString sbs = new SpannableString(item1.getTitle());
sbs.setSpan(new ForegroundColorSpan(Color.RED),0,1,0);
sbs.setSpan(new ForegroundColorSpan(Color.YELLOW),1,2,0);
sbs.setSpan(new ForegroundColorSpan(Color.BLUE),2,3,0);
item1.setTitle(sbs);
// item2.setTitle("天气好");
String stsHtml = "<font color='#ff6f00'>天</font><font color='#00b7ff'>气</font>好";
item2.setTitle(Html.fromHtml(stsHtml));
item3.setTitle("吃饭香");
return super.onCreateOptionsMenu(menu);
}
2.Percent 百分比布局
<android.support.percent.PercentRelativeLayout ...>
<View
android:layout_width="0dp"
android:layout_height="0dp"
android:background="#909090"
app:layout_widthPercent="80%"
app:layout_heightPercent="20%"
/>
<View
android:layout_width="0dp"
android:layout_height="0dp"
android:background="#ffa200"
android:layout_alignParentRight="true"
app:layout_widthPercent="20%"
app:layout_heightPercent="80%"
/>
<View
android:layout_width="0dp"
android:layout_height="0dp"
android:background="#00bafd"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
app:layout_widthPercent="80%"
app:layout_heightPercent="20%"
/>
<View
android:layout_width="0dp"
android:layout_height="0dp"
android:background="#1aff00"
android:layout_alignParentBottom="true"
app:layout_widthPercent="20%"
app:layout_heightPercent="80%"
/>
<View
android:layout_width="0dp"
android:layout_height="0dp"
android:background="#ff00fb"
android:layout_centerInParent="true"
app:layout_widthPercent="60%"
app:layout_heightPercent="60%"
/>
</android.support.percent.PercentRelativeLayout>
3.FloatingActionButton 浮动按钮
<android.support.design.widget.CoordinatorLayout ...>
<!--
backgroundTint:设置颜色
pressedTranslationZ:点击时的阴影大小
fabSize:确定floatingactionbutton大小
-->
<android.support.design.widget.FloatingActionButton
android:layout_margin="10dp"
android:onClick="clickButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_home"
android:layout_gravity="bottom|right"
app:backgroundTint="#90909090"
app:borderWidth="0dp"
app:fabSize="normal"
app:rippleColor="#ff4d00"
/>
</android.support.design.widget.CoordinatorLayout>
4.Snackbar
public void clickButton(View view) { Snackbar snackbar = Snackbar.make(view,"你说什么?",Snackbar.LENGTH_SHORT); snackbar.setAction("广告", new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(FloatActionActivity.this, "广告打得好,不如新飞冰箱好", Toast.LENGTH_SHORT).show(); } }); snackbar.setActionTextColor(Color.YELLOW); View mView = snackbar.getView(); mView.setBackgroundColor(Color.BLUE); TextView mText = (TextView) mView.findViewById(android.support.design.R.id.snackbar_text); mText.setText("杀白猪爆金条"); mText.setTextColor(Color.RED); snackbar.show(); }
5.TextInputEditText 文本输入布局
<android.support.design.widget.TextInputEditText android:id="@+id/input_user_edit" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="请输入用户名" />
public void login(View view) {
String user = mUserEdit.getText().toString();
if(user!=null&&user.isEmpty()){
//设置错误提示
mUserLayout.setError("用户名不能为空");
return;
}else{
//隐藏错误提示
mUserLayout.setErrorEnabled(false);
}
...
}
6.TabLayout 选项卡
private void initTab() {
mTabLayout.setTabMode(TabLayout.MODE_SCROLLABLE);
mTabLayout.addTab(mTabLayout.newTab().setCustomView(createCustomView()).setText("娃哈哈").setIcon(R.drawable.ic_home));
mTabLayout.addTab(mTabLayout.newTab().setCustomView(createCustomView()).setText("娃哈哈").setIcon(R.drawable.ic_home));
mTabLayout.setTabTextColors(Color.WHITE,Color.RED);
mTabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
/**
* 当TAB选中的时候
* @param tab
*/
@Override
public void onTabSelected(TabLayout.Tab tab) {
TextView view = (TextView) tab.getCustomView().findViewById(android.R.id.text1);
view.setTextColor(Color.RED);
}
/**
* 当TAB解除选中
* @param tab
*/
@Override
public void onTabUnselected(TabLayout.Tab tab) {
TextView view = (TextView) tab.getCustomView().findViewById(android.R.id.text1);
view.setTextColor(Color.WHITE);
}
/**
* 再次被选中
* @param tab
*/
@Override
public void onTabReselected(TabLayout.Tab tab) {
TextView view = (TextView) tab.getCustomView().findViewById(android.R.id.text1);
view.setTextColor(Color.YELLOW);
}
});
// mTabLayout.setSelectedTabIndicatorColor(); 指示器颜色
mTabLayout.setSelectedTabIndicatorHeight(2); //指示器高度
// mTabLayout.setupWithViewPager(); //关联ViewPager
}
private View createCustomView(){
View view = LayoutInflater.from(this).inflate(R.layout.tab_item, null);
return view;
}
7.NavigationView 导航
<android.support.v4.widget.DrawerLayout ...>
<android.support.design.widget.AppBarLayout
...>
<android.support.v7.widget.Toolbar
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize" />
<android.support.design.widget.TabLayout
...>
</android.support.design.widget.AppBarLayout>
<android.support.design.widget.NavigationView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="start"
android:fitsSystemWindows="true"
app:headerLayout="@layout/view_head"
app:menu="@menu/navigation_menu" />
</android.support.v4.widget.DrawerLayout>
navigation_menu.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<group android:checkableBehavior="single">
<item
android:id="@+id/id_01"
android:icon="@drawable/ic_home"
android:title="一"
/>
<item
android:id="@+id/id_02"
android:icon="@drawable/ic_home"
android:title="二"
/>
<item
android:id="@+id/id_03"
android:icon="@drawable/ic_home"
android:title="三"
/>
</group>
<item android:title="More">
<menu>
<item
android:id="@+id/id_04"
android:title="Setting"
android:icon="@mipmap/ic_launcher"
/>
</menu>
</item>
</menu>
<android.support.design.widget.CoordinatorLayout ...>
<android.support.design.widget.AppBarLayout
...>
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:layout_scrollFlags="scroll|enterAlways"
app:title="ToolBar" />
<android.support.design.widget.TabLayout
...
app:layout_scrollFlags="scroll|enterAlways"
>
<android.support.design.widget.TabItem
...
android:text="TabLayout" />
</android.support.design.widget.TabLayout>
<ImageView
app:layout_scrollFlags="scroll|enterAlways"
... />
</android.support.design.widget.AppBarLayout>
<!--嵌套滚动视图 RecycleView NestedScrollView-->
<android.support.v4.widget.NestedScrollView
...
app:layout_behavior="@string/appbar_scrolling_view_behavior"
>
<LinearLayout
...
android:orientation="vertical">
<TextView
...
android:layout_margin="20dp"
android:text="1234567" />
<TextView ... />
<TextView ... />
</LinearLayout>
</android.support.v4.widget.NestedScrollView>
</android.support.design.widget.CoordinatorLayout>
<string name="appbar_scrolling_view_behavior" translatable="false">android.support.design.widget.AppBarLayout$ScrollingViewBehavior</string>
9.CollapsingToolBarLayout 折叠布局
<android.support.design.widget.CoordinatorLayout ...>
<android.support.design.widget.AppBarLayout
android:id="@+id/appbar"
...>
<android.support.design.widget.CollapsingToolbarLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:theme="@style/ThemeOverlay.AppCompat.Dark"
app:contentScrim="@color/colorPrimary"
app:layout_scrollFlags="scroll|exitUntilCollapsed|snap"
app:title="TEST">
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="centerCrop"
android:src="@drawable/image"
app:layout_collapseMode="parallax" />
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:popupTheme="@style/ThemeOverlay.AppCompat.Dark"
app:layout_collapseMode="pin"/>
</android.support.design.widget.CollapsingToolbarLayout>
</android.support.design.widget.AppBarLayout>
<android.support.v4.widget.NestedScrollView
...>
...
</android.support.v4.widget.NestedScrollView>
<android.support.design.widget.FloatingActionButton
android:src="@drawable/ic_home"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_anchor="@id/appbar"
app:layout_anchorGravity="bottom|center"
android:layout_margin="10dp"
/>
</android.support.design.widget.CoordinatorLayout>
10.CoordinatorLayout.Behavior之move
<android.support.design.widget.CoordinatorLayout ...>
<TextView
android:layout_width="80dp"
android:layout_height="80dp"
android:layout_gravity="left"
android:background="#00d0ff"
android:gravity="center"
android:onClick="move"
android:text="第一个"
android:textColor="#ffffff" />
<TextView
android:onClick="move"
android:layout_width="80dp"
android:layout_height="80dp"
android:layout_gravity="center"
android:background="#ff9900"
android:gravity="center"
android:text="第二个"
android:textColor="#ffffff"/>
<TextView
android:layout_width="80dp"
android:layout_height="80dp"
android:layout_gravity="right"
android:background="#ff9900"
android:gravity="center"
android:text="第三个"
android:textColor="#ffffff"
app:layout_behavior="com.coordinatorLayout_behavior.MoveBehavior" />
</android.support.design.widget.CoordinatorLayout>
public class MoveBehavior extends CoordinatorLayout.Behavior<TextView>{
public MoveBehavior(Context context, AttributeSet attr){
super(context,attr);
}
@Override
public boolean layoutDependsOn(CoordinatorLayout parent, TextView child, View dependency) {
return dependency instanceof TextView;
}
/**
* 当我们关系的视图发生改变的时候
* @param parent 父布局
* @param child 设置behavior的布局
* @param dependency 关心的布局
* @return
*/
@Override
public boolean onDependentViewChanged(CoordinatorLayout parent, TextView child, View dependency) {
int top = dependency.getTop() - child.getTop();
ViewCompat.offsetTopAndBottom(child,top);//设置该Behavior的TextView随dependency的移动而移动
return true;
}
}
11.CoordinatorLayout.Behavior之Scroll
<android.support.design.widget.CoordinatorLayout ...>
<android.support.v4.widget.NestedScrollView
android:layout_width="100dp"
android:layout_height="match_parent"
android:background="#ff9900">
<LinearLayout
...>
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="10dp"
android:gravity="center"
android:text="滚动"
android:textColor="#ffffff" />
...
</LinearLayout>
</android.support.v4.widget.NestedScrollView>
<android.support.v4.widget.NestedScrollView
android:layout_gravity="right"
android:layout_width="100dp"
android:layout_height="match_parent"
android:background="#009dff"
app:layout_behavior="com.coordinatorLayout_behavior.ScrollBehavior">
<LinearLayout
...>
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="10dp"
android:gravity="center"
android:text="滚动"
android:textColor="#ffffff" />
...
</LinearLayout>
</android.support.v4.widget.NestedScrollView>
</android.support.design.widget.CoordinatorLayout>
public class ScrollBehavior extends CoordinatorLayout.Behavior<View>{
public ScrollBehavior(Context context, AttributeSet attr){
super(context,attr);
}
/**
* 启动滚动
* @param coordinatorLayout 父布局
* @param child 关联的Behavior的视图
* @param directTargetChild 目标子视图
* @param target 关心的视图
* @param nestedScrollAxes 滚动的方向
* @return
*/
@Override
public boolean onStartNestedScroll(CoordinatorLayout coordinatorLayout, View child, View directTargetChild, View target, int nestedScrollAxes) {
//按位与 非0 为真 SCROLL_AXIS_HORIZONTAL
return (nestedScrollAxes& ViewCompat.SCROLL_AXIS_VERTICAL)!=0;
}
/**
* 视图滚动的时候
* @param coordinatorLayout 父布局
* @param child behavior的视图
* @param target 关心的视图
* @param dx 横向移动的像素
* @param dy 竖向移动的像素
* @param consumed
*/
@Override
public void onNestedPreScroll(CoordinatorLayout coordinatorLayout, View child, View target, int dx, int dy, int[] consumed) {
super.onNestedPreScroll(coordinatorLayout, child, target, dx, dy, consumed);
int scrollY = target.getScrollY();
// child.setScaleY();
child.setScrollY(scrollY);
}
/**
* 快速滑动
* @param coordinatorLayout 父布局
* @param child 设置Behavior的视图
* @param target 所关心的那个
* @param velocityX 速度X
* @param velocityY 速度Y
* @param consumed
* @return
*/
@Override
public boolean onNestedFling(CoordinatorLayout coordinatorLayout, View child, View target, float velocityX, float velocityY, boolean consumed) {
if(child instanceof NestedScrollView){
((NestedScrollView)child).fling((int) velocityY);
}
return true;
}
}
13.StyleColor