界面布局

LinearLayout(线性布局)

XML属性 相关方法 说 明
Android:orientation SetOrientation(int) 设置布局内组件的排列方式,可以设置为horizontal(水平排列)、vertical(垂直排列、默认值)两个值的其中之一
Android:gravity setGravity(int) 设置布局内组件的对齐方式,可选值包括top、bottom、left、right、center_vertical、fill_vertical、center_horizonal、fill_horizontal、center、fill、clip_vertical和clip_horizontal.这些属性值可以同时指定,各属性之间用竖线隔开。如要指定组件靠左下角对齐,可以用left|botton

FrameLayout(框架布局)

​ 框架布局是组织视图控件最简单和最有效地布局之一。该布局一般只用来显示单视图或者层叠的多视图。

XML属性 相关方法 说 明
Android:foreground SetForeground(Drawable) 设置框架布局视窗的前景图像
Android:foregroundGravity SetForegroundGravity(int) 定义绘制前景图像的gravity属性

TableLayout(表格布局)

​ 表格布局中每一个TableRow对象或者View对象为一行。TableRow是一个容器,因此可以向TableRow中添加子控件,每添加一个子控件该表格就增加一列。

XML属性 相关方法 说 明
Android:collapseColumns SetColumnCollapsed(int,boolean) 设置需要被隐藏的列的列序号(序号从0开始),多个列序号之间用逗号“,”分隔。
Android:shrinkColumns setShrinkAllColumns(boolean) 设置允许被收缩的列的列序号(序号从0开始),多个列序号之间用逗号“,”分隔。
Android:stretchColumns setStretchAllColumns (boolean) 设置允许被拉伸的列的列序号(序号从0开始),多个列序号之间用逗号“,”分隔。

GridLayout(网格布局)

RelativeLayout(相对布局)

AbsoluteLayout(绝对布局)

界面控件

  1. TextView 和 EditText

    TextView只用于显示文本,EditText可编辑文本

  2. CheckBox 和 RadioButton

    添加RadioButton

    添加之前要先设至一个RadioGroup,设置为一组,这样才能单选

    img

    package com.example.sx5_2;

    import androidx.appcompat.app.AppCompatActivity;

    import android.os.Bundle;
    import android.view.Display;
    import android.view.Menu;
    import android.view.View;
    import android.widget.Adapter;
    import android.widget.AdapterView;
    import android.widget.ArrayAdapter;
    import android.widget.Button;
    import android.widget.CheckBox;
    import android.widget.EditText;
    import android.widget.RadioButton;
    import android.widget.RadioGroup;
    import android.widget.Spinner;
    import android.widget.TextView;
    import android.widget.Toast;

    public class MainActivity extends AppCompatActivity {

    Button button = null;
    String Name = "";
    String Password = "";
    String gender = "";
    String Hobby = "";
    String Country = "";
    String City = "";

    // Spinner Countries,citites;
    String[] countryItem;
    String[] cityItem;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    //Spinner
    Spinner Countries = (Spinner)findViewById(R.id.spinner);
    Spinner Cities = (Spinner)findViewById(R.id.spinner2);
    //绑定注册按钮
    button = (Button)findViewById(R.id.button2);
    button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
    EditText name = (EditText)findViewById(R.id.editTextTextMultiLine2);
    Name = "姓名:" + name.getText().toString() +"\n";
    EditText password = (EditText)findViewById(R.id.editTextTextMultiLine3);
    Password = "密码:" + password.getText().toString() + "\n";
    //根据ID找到RadioGroup实例
    RadioGroup group = (RadioGroup)findViewById(R.id.radiogroup);
    //绑定一个匿名监听器
    group.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
    @Override
    public void onCheckedChanged(RadioGroup group, int checkedId) {
    //获取变更后的选中项的ID
    int radioButtonId = group.getCheckedRadioButtonId();
    //根据ID获取RadioButton的实例
    RadioButton radiobutton = (RadioButton)MainActivity.this.findViewById(radioButtonId);
    //更新文本内容,已符合选中项
    gender = "你的性别是:" + (String)radiobutton.getText() + "; ";
    }
    });
    Hobby = "体育爱好:";
    CheckBox checkbox1 = (CheckBox)findViewById(R.id.checkBox1);
    CheckBox checkbox2 = (CheckBox)findViewById(R.id.checkBox2);
    CheckBox checkbox3 = (CheckBox)findViewById(R.id.checkBox3);
    CheckBox checkbox4 = (CheckBox)findViewById(R.id.checkBox4);
    //对选项进行确定
    if(checkbox1.isChecked()){
    Hobby = Hobby + checkbox1.getText()+" ";
    }
    if(checkbox2.isChecked()){
    Hobby = Hobby + checkbox2.getText()+" ";
    }
    if(checkbox3.isChecked()){
    Hobby = Hobby + checkbox3.getText()+" ";
    }
    if(checkbox4.isChecked()){
    Hobby = Hobby + checkbox4.getText()+" ";
    }
    DisplayToast(Name + Password + Country + City + gender + Hobby);
    }
    });
    Countries = findViewById(R.id.spinner);
    //获取array中定义的值
    countryItem = getResources().getStringArray(R.array.countries);
    //添加Spinner监听事件
    Countries.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
    @Override
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
    Country = "国籍:" + countryItem[position] + "\n";
    }

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

    }
    });

    Cities = findViewById(R.id.spinner2);
    //获取array中定义的值
    cityItem = getResources().getStringArray(R.array.cities);
    //添加Spinner监听事件
    Cities.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
    @Override
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
    City = "城市:" + cityItem[position] + "\n";
    }

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

    }
    });

    }

    public void DisplayToast(String str){
    Toast.makeText(this,str,Toast.LENGTH_LONG).show();
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.activity_main,menu);
    return true;
    }
    }
  3. Spinner

    添加Spinner组件,有两种方法,一种是在java代码中实现,一种是在xml中实现。对我来说肯定选择后者,方便快捷而且不会混乱。但要在res文件夹中values文件夹中创建两个xml文件,用来存放string数组,这个数组就是spinner的下拉item。

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
    <string-array name="countries">
    <item>中国</item>
    <item>日本</item>
    <item>美国</item>
    </string-array>
    </resources>

    ​ 同时在spinner的xml代码中,要添加以下代码,类似spinner引用该数组。android:entries=”@array/countries”

    <Spinner
    android:id="@+id/spinner"
    android:layout_width="409dp"
    android:layout_height="80dp"
    android:entries="@array/countries"
    app:layout_constraintStart_toStartOf="parent"
    tools:layout_editor_absoluteY="228dp" />

事件处理

  1. 匿名内部类作为监听器类

    bt.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
    Intent intent = new Intent();
    intent.setClass(OtherActivity.this,MainActivity.class);
    OtherActivity.this.startActivity(intent);
    OtherActivity.this.finish();
    }
    });
  2. 内部类作为事件监听器类

    //内部类,放在Acitvity类中
    class MyClickListener implements View.OnClickListener{
    @override
    public void onClick(View v){
    DisplayToast("事件触发器");
    }
    }
  3. 外部类作为事件监听器类

    //新建一个MyClickListner类作为外部类
    public class MyClickListener implements OnClickListener{
    ...
    }

    //MainActivity.java
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_other);
    Button button = (Button)findViewById(R.id.XXX);
    button.setOnClickListener(new MyClickLister(this));
    }
  4. Activity本身作为事件监听类

    public class MainActivity extends AppCompatActivity implements OnClickListner{

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    //此时按钮响应事件就要改变了
    public void onClick(View v){
    DisplayToast("事件触发成功");
    }
    }
    }