Post

【Android】常用控件

  • 为了在代码中可以用变量表示控件,需要设置id:android:id=”@+id/btDial”
  • 通过id获取控件到变量中:findViewById(R.id.btDial)

线性布局LinearLayout

  • 排列方向:android:orientation(属性都是android:开头)
  • 控件添加在布局标签内:
1
2
3
4
<LinearLayout 属性...>
    <TextView 属性... />
    <Button 属性... />
</LinearLayout>

标签TextView

  • 长宽:layout_width、layout_height属性,wrap_content:包裹内容,自动调整大小;match_parent:与父容器一样长/宽
  • 内容:text属性,不要硬编码,字符串资源放在string.xml,引用字符串:@string/字符串名
  • 将字符串提取到string.xml的快捷键:选中字符串按Alt+Enter
  • 文字大小:android:textSize,单位选sp

输入框:EditText

按钮:Button

  • 右对齐:android:layout_gravity=”right”
  • 设置按钮点击事件的4种方法:

(1) 内部类

在Activity中声明内部类:

1
2
3
4
5
6
private class MyClick implements View.OnClickListener {
    @Override
    public void onClick(View view) {
        // 事件代码
    }
}

设置点击事件:

1
button.setOnClickListener(new MyClick());

(2) (推荐)虚拟匿名类

设置点击事件:

1
2
3
4
5
6
button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        // 事件代码
    }
});

如果不在其他地方使用,也可以省略变量:

1
findViewById(R.id.xx).setOnClickListener(new View.OnClickListener() {...});

(3) (推荐)onClick属性:android:onClick=”call”,事件代码写入call(View view)函数,使用这种方式不需为按钮设置id和声明变量

(4) 强行介入:直接让Activity实现View.OnClickListener接口并重写onClick()方法,并在onClick(view)中用switch (view.getId()),设置点击事件:

1
button.setOnClickListener(this);

这种方法同时为一组按钮设置点击事件(如计算器应用)。

下拉列表Spinner

  • 设置列表项目的两种方法:

(1) string-array资源+entries属性

string.xml中写string-array:

1
2
3
4
5
<string-array name="comboItems">
    <item>下拉列表项目1</item>
    <item>下拉列表项目2</item>
    <item>下拉列表项目3</item>
</string-array>

activity_main.xml中设置Spinner空间的属性:

1
android:entries="@array/comboItems"

(2) 适配器Adapter

Activity代码中:

1
2
ArrayAdapter<String> adapter = new ArrayAdapter<>(this, R.layout.support_simple_spinner_dropdown_item, newComboItems);
spinner1.setAdapter(adapter);

注意:ArrayAdapter构造器的第二个参数一定要写R.layout.support_simple_spinner_dropdown_item而不能是R.layout.activity_main,否则执行setAdapter(adapter)时会产生空指针异常!

1
java.lang.IllegalStateException: ArrayAdapter requires the resource ID to be a TextView

使用这种方法也可以在代码中动态设置列表项目

注意:若没有添加v7兼容包,即继承自Activity而不是AppCompatActivity则不能使用R.layout.support_simple_spinner_dropdown_item,否则会报错:

1
java.lang.RuntimeException: Failed to resolve attribute at index 6

应改为android.R.layout.simple_spinner_item或android.R.layout.simple_spinner_dropdown_item

  • 设置项目选择事件:
1
2
3
4
5
6
7
8
9
10
11
12
13
spinner1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
    @Override
    public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
        Toast.makeText(MainActivity.this,
                "你选择的是第" + (i + 1) + "项:" + adapterView.getItemAtPosition(i),
                Toast.LENGTH_SHORT).show();
    }

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

    }
});

注意是setOnItemSelectedListener而不能是setOnClickListener或setOnItemClickListener,否则会产生异常(和两个方法不能用)

开关Switch

  • 设置点击事件:
1
2
3
4
5
6
switch1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
    @Override
    public void onCheckedChanged(CompoundButton compoundButton, boolean b) {

    }
});

参数b表示是否打开

列表ListView

  • 设置适配器:
1
lvResult.setAdapter(new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, persons));

其中ArrayAdapter:

1
public ArrayAdapter(Context context, int resource, List<T> objects);
  • 设置点击事件:
1
2
3
4
5
6
7
lvResult.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        Toast.makeText(MainActivity.this, "你点击了第" + position + "项:\n"
                + parent.getItemAtPosition(position), Toast.LENGTH_SHORT).show();
    }
});

WebView

This post is licensed under CC BY 4.0 by the author.