Android 视图设计用户界面

基本视图

  1. ToggleButtonRadioButtonRadioGroupAutoCompleteTextView
  2. ToggleButton 用一个灯光指示器来显示选中/未选中状态

    1
    2
    3
    4
    5
    <ToggleButton
    android:id="@+id/toggle1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@id/rdbGp1"/>

  3. RadioButtonRaidoGroup
    • RadioButton 有两个状态:选中或未选中。
    • RaidoGroup 用来把一个或多个 RaidoButton 视图组合在一起,从而只允许一个 RaidoButton 被选中。
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      <RadioGroup
      android:id="@+id/rdbGp1"
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      android:orientation="horizontal"
      android:layout_below="@id/star">
      <RadioButton
      android:id="@+id/rdb1"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Option 1" />
      <RadioButton
      android:id="@+id/rdb2"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Option 2" />
      </RadioGroup>
      视图效果如下:
  4. AutoCompleteTextView:与 EditText 类似,输入时提供候选项

    1
    2
    3
    4
    5
    6
    <AutoCompleteTextView
    android:id="@+id/txtCountries"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentStart="true"
    android:layout_below="@+id/textView" />

    1
    2
    3
    4
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line,presidents);//创建容器
    AutoCompleteTextView textView = (AutoCompleteTextView) findViewById(R.id.txtCountries);
    textView.setThreshold(3);
    textView.setAdapter(adapter);//设置候选项

    视图效果:

  5. CheckBoxRadioButton 视图事件

    • CheckBox:需将 onClick() 方法的参数类型转换为一个CheckBox ,然后检查 isCheckBox() 方法来确定其是否被选中

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      CheckBox checkBox = (CheckBox)findViewById(R.id.chkAutosave);
      checkBox.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
      if (((CheckBox) v).isChecked())
      DisplayToast("CheckBox is checked");
      else
      DisplayToast("CheckBox is unchecked");
      }
      });

    • RadioButton:需要使用 RadioGroupsetOnCheckedChangeListener() 方法注册一个回调函数, 以便该组中的被选中的 RadioButton 发生变化的时候调用。

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      RadioGroup radioGroup = (RadioGroup)findViewById(R.id.rdbGp1);
      radioGroup.setOnCheckedChangeListener(new OnCheckedChangeListener() {
      @Override
      public void onCheckedChanged(RadioGroup group, int checkedId) {
      RadioButton rb1 = (RadioButton) findViewById(R.id.rdb1);
      if (rb1.isChecked()) {
      DisplayToast("Option 1 checked");
      } else {
      DisplayToast("Option 2 checked");
      }
      }
      });

列表视图

  1. ListView,Spinner
    • ListView

      1
      2
      3
      4
      5
      setListAdapter(new ArrayAdapter<String>(
      this,android.R.layout.simple_list_item_checked, presidents));//设置列表项
      public void onListItemClick(ListView parent, View v, int position, long id) {
      Toast.makeText(this, "you have selected:" + presidents[position], Toast.LENGTH_SHORT).show();
      }

      getListView() 获取当前的列表视图,只有当前 Activity 继承 ListAcitvity 时才能用。

    • Spinner

      1
      2
      3
      4
      5
      <Spinner
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@+id/spinner"
      android:drawSelectorOnTop="true"/>

      设置列表和判断选择

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      Spinner spinner = (Spinner) findViewById(R.id.spinner);
      ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
      android.R.layout.simple_spinner_item, prisidents);
      spinner.setAdapter(adapter);//设置列表项
      spinner.setOnItemSelectedListener(new OnItemSelectedListener() {

      @Override
      public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
      int index = parent.getSelectedItemPosition();
      Toast.makeText(BasicViews6Activity.this, "you have selected item :" + prisidents[index], Toast.LENGTH_SHORT).show();
      }

      @Override
      public void onNothingSelected(AdapterView<?> parent) {

      }
      });//判断哪一项被选择了

特殊碎片

  1. ListFragmentDialogFramentPerferenceFragment 要使用 ListFragment 首先需要创建一个 ListFragment 的类 (fragmnet1),创建一个关于 fragment1 的视图,在 Activity 的 Layout 中声明碎片。在 Activity 中显示于 fragment1 的视图,可以使用 FragmentMangerFragmentTransaction 类;

    1
    2
    3
    4
    5
    6
    7
    FragmentManager fragmentManager = getFragmentManager();
    FragmentTransaction fragmentTransaction =
    fragmentManager.beginTransaction();
    Fragment1 fragment1 = new Fragment1();
    fragmentTransaction.replace(android.R.id.content,fragment1);
    fragmentTransaction.addToBackStack(null);
    fragmentTransaction.commit();

    PerferenceFragmentPreferenceCategory 用于创建类别
    PreferenceScreen 用于显示一个 PerferenceFragmnet 界面


练习

  1. 访问放在 Strings.xml 文件中的字符串资源
    getResources()
  2. 获取当前日期

    1
    2
    3
    4
    Calendar today = Calendar.getInstance();
    yr = today.get(Calendar.YEAR);
    month = today.get(Calendar.MONTH);
    day = today.get(Calendar.DAY_OF_MONTH);