# DesignDemo02
**Repository Path**: MaterialDisign/DesignDemo02
## Basic Information
- **Project Name**: DesignDemo02
- **Description**: meterail design 控件:TextInputLayout + BottomNavigationView + SearchView + 白天夜间模式切换
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2016-11-12
- **Last Updated**: 2022-06-12
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
下面介绍的内容是:TextInputLayout + BottomNavigationView + SearchView + 白天夜间模式切换
源码:https://git.oschina.net/MaterialDisign/DesignDemo02
效果图:

# **6 TextInputLayout** #
> 里面只可以包含一个EditView,常用的2个 方法是```setErrorEnabled(boolean)```(不可以提示错误信息) 和```setError(CharSequence)```(提示错误信息)
## **效果图** ##

## **xml** ##
```
```
> ime是软键盘(输入法)的意思,```android:imeActionId=```是软键盘右下角按钮的id,```android:imeOptions="actionDone"```是动作意图,```android:imeActionLabel=```是显示的文字(以```imeOptions```为主)。详情[android EditText inputType 及 android:imeOptions=”actionDone”](http://blog.csdn.net/caiwenfeng_for_23/article/details/37900503)
## **代码** ##
```
//刚开始不显示错误信息,只有判断之后才会提示错误信息
textInputLayout1.setErrorEnabled(false);
textInputLayout2.setErrorEnabled(false);
String phone = et_phone.getText().toString().trim();
String pwd = et_pwd.getText().toString().trim();
if (TextUtils.isEmpty(phone)) {
textInputLayout1.setError("手机号不可为空");
} else if (phone.length() != 11) {
textInputLayout1.setError("请输入正确的手机号");
} else if (TextUtils.isEmpty(pwd)) {
textInputLayout2.setError("密码不可为空");
} else if (pwd.length() < 6) {
textInputLayout2.setError("密码不少于6位");
} else {
toast.setText("登录成功");
toast.show();
}
```
可以给软键盘的enter见设置点击事件,调用EditText的setOnEditorActionListener(...)方法
```
//设置软键盘的点击事件
et_pwd.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView textView, int id, KeyEvent keyEvent) {
if (id == R.id.login || id == EditorInfo.IME_ACTION_DONE) {
loginApp();//执行登录操作
return true;//事件被消耗
}
return false;
}
});
```
# **7BottomNavigationView** #
> 可以作为底部导航栏,自带 动画效果
## **效果图:** ##

## **xml** ##
> 最重要的属性是```app:menu=```
```
```
**res/menu/bottom_navigation_view.xml**
```
```
## **代码** ##
```
bottonNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id.tab1:
toast.setText("tab1");
toast.show();
break;
case R.id.tab2:
toast.setText("tab2");
toast.show();
break;
...
}
return true;
}
});
```
#**8 CollapsingToolbarLayout**#

> 包裹Toolbar + 其他控件,其他控件作为背景,这里已ImageView为例
```
```
下面介绍些其他的内容,不属于Material Design,包含SearchView + 夜间模式 + 过度动画
# **1 SearchView ** #

```
```
```
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
//点击软键盘输入法中的搜索按钮调用这个方法
@Override
public boolean onQueryTextSubmit(String query) {
toast.setText(query);
toast.show();
return true;
}
//newText:搜索框内的整体值
@Override
public boolean onQueryTextChange(String newText) {
toast.setText(newText);
toast.show();
return true;
}
});
```
# **2 白天模式 + 夜间模式** #

> 用到的类:AppCompatDelegate 方法setDefaultNightMode(int mode) + recreate();
> 需要创建res/values-night/style.xml,主题继承自```Theme.AppCompat.DayNight```
style.xml
```
```
代码;
```
btn_day.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
recreate();
}
});
btn_night.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
recreate();
}
});
```
# **3 过度动画** #

> 用到的类:ActivityOptionCompat + ViewCompat,用到的的方法```makeSceneTransitionAnimation(...), ViewCompat.setTransitionName(iv, "transition");```
在MAinActivity中给ImageView设置点击事件,并设置过度动画,在新打开的NewActivity中设置控件
```
iv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//ActivityOptionsCompat必须放在点击事件中
ActivityOptionsCompat optionsCompat = ActivityOptionsCompat.makeSceneTransitionAnimation(MainActivity.this, iv, "transition");
startActivity(new Intent(MainActivity.this, NewActivity.class), optionsCompat.toBundle());
}
});
```
```
ViewCompat.setTransitionName(iv, "transition");
```