用户界面常见控件
常见控件
TextView
1. 让textView里面的内容水平居中 : android:gravity="center_horizontal"
2. 让textView控件在它的父布局里水平居中 android:layout_gravity="center_horizontal"
日期选择器-DatePickerDialog
//获取日历的一个对象
Calendar calendar = Calendar.getInstance();
//获取年月日时分的信息
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH);
int day = calendar.get(Calendar.DAY_OF_MONTH);
new DatePickerDialog(v.getContext(),new DatePickerDialog.OnDateSetListener(){
@Override
public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
String res = String.format("你选择的日期是:%d-%d-%d", year, month+1, dayOfMonth);
Toast.makeText(view.getContext(), res,Toast.LENGTH_LONG).show();
Log.d(TAG, res);
}
},year,month,day).show();
时间选择器-TimePickerDialog
//获取日历的一个对象
Calendar calendar = Calendar.getInstance();
//获取年月日时分的信息
int hour = calendar.get(Calendar.HOUR_OF_DAY);
int mintue = calendar.get(Calendar.MINUTE);
new TimePickerDialog(v.getContext(),1,new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
String res = String.format("你选择的时间是:%d:%d", hourOfDay,minute);
Toast.makeText(view.getContext(), res,Toast.LENGTH_LONG).show();
Log.d(TAG, res);
}
},hour,mintue,true).show();
单项选择器
- 实现
- 用RadioGruop包裹RadioButton
- ischecked()判断选项是否选中
多项选择器
- 实现
- 直接使用ChecBox
- setOnCheckedChangeListener();\设置监听器
- isChecked()判断该CheckBox是否被选中
SlidingMenu菜单栏(待实现)
PopupWindow
- 声明
private PopupWindow pwTableNames;
- 初始化及设置
//需要传入视图,代码设置、layout文件 pwTableNames = new PopupWindow(view,tvSelector.getWidth(), ViewGroup.LayoutParams.WRAP_CONTENT); pwTableNames.setOutsideTouchable(true);//设置点击外部时,控件回弹 pwTableNames.setFocusable(true);//设置再点击控制控件,控件回弹 pwTableNames.setAttachedInDecor(true);//--- pwTableNames.showAsDropDown(tvSelector);//该控件依附于其他控件
- 代码控制控件回弹
if(pwTableNames.isShowing()){ pwTableNames.dismiss(); }
RecyclerView
- 添加依赖:recyclerview-v7
-
布局文件添加该控件
<?xml version="1.0" encoding="utf-8"?> <androidx.recyclerview.widget.RecyclerView android:id="@+id/rcv_items" android:layout_width="match_parent" android:layout_height="match_parent" xmlns:android="http://schemas.android.com/apk/res/android"> </androidx.recyclerview.widget.RecyclerView>
- 设置图层管理器和适配器
rcvItems.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL,false)); rcvItems.setAdapter(new adapter_MyAdapter());
-
适配器(Adapter)
- 作用:设置控件中每个单元的UI,和单元中各个控件属性,单元数量
-
三个重载函数
- 设置UI,返回每个单元的UI->ViewHolder
- 编写内部类继承于ViewHolder,主要查找控件并RETURN,方便设置其属性
- 编辑属性,通过函数参数获取控件并设置其属性,结合position与外部数据结合设置控件的属性
- 单元数量,一般为数据元组的个数
class adapter_MyAdapter extends RecyclerView.Adapter { //内部类 class view extends RecyclerView.ViewHolder{ private TextView tv; private Button btn; public view(@NonNull View view) { super(view); tv = view.findViewById(R.id.tv_text); btn = view.findViewById(R.id.button); } public TextView getTv(){ return tv; } public Button getBtn(){return btn;} } @NonNull @Override//重载函数一:指定UI public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { //return new view(new TextView(parent.getContext())); return new view(LayoutInflater.from(parent.getContext()).inflate(R.layout.recycle_view, null)); } @Override//重载函数二:UI详细设计 public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, final int position) { view tv = (view)holder; tv.getTv().setText("item"+position); tv.getBtn().setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(v.getContext(), "点击该控件"+position, Toast.LENGTH_SHORT).show(); } }); } @Override//重载函数三:单元数量 public int getItemCount() { return 12; } }
- 设置UI,返回每个单元的UI->ViewHolder