阳光沙滩
让学习编程变得简单
【android学习笔记一】用户界面常见控件
发表于 2020-02-11    阅读次数 607

用户界面常见控件

常见控件

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菜单栏(待实现)


  • 声明
    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;
          }
      }