Android基础控件基本应用
这篇博客将介绍基本控件的基本用法和它的监听事件说明,基于约束布局
文本控件和按钮
文本控件包括很多类型,这里主要讲解文本框(TextView)和编辑框(EditText),同时说明按钮的基本监听。点击按钮这把编辑框的文本显示在文本框
首先我们看一下布局代码(xml代码)
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/text_welcome"
android:textColor="@color/text_welcome_color"
android:textSize="@dimen/text_size"
app:layout_constraintBottom_toTopOf="@+id/guideline5"
app:layout_constraintEnd_toStartOf="@+id/guideline4"
app:layout_constraintStart_toStartOf="@+id/guideline3"
app:layout_constraintTop_toTopOf="@+id/guideline5" />
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/button_go"
app:layout_constraintBottom_toTopOf="@+id/guideline7"
app:layout_constraintEnd_toStartOf="@+id/guideline4"
app:layout_constraintStart_toStartOf="@+id/guideline3"
app:layout_constraintTop_toTopOf="@+id/guideline7" />
<EditText
android:id="@+id/editText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:autofillHints=""
android:ems="10"
android:hint="@string/text_edit1"
android:inputType="textPersonName"
android:textSize="@dimen/text_edit"
app:layout_constraintBottom_toTopOf="@+id/guideline6"
app:layout_constraintEnd_toStartOf="@+id/guideline4"
app:layout_constraintStart_toStartOf="@+id/guideline3"
app:layout_constraintTop_toTopOf="@+id/guideline6" />
这上面的xml代码其中Android:id代表的是控件的唯一标识;
android:layout_width和android:layout_height表示的是控件中设置文本所占的宽度渝高度;
android:text表示文本上显示的文本值;
android:textColor表示文本字体的颜色;
android:textSize表示文本字体的大小;
以上三个属性我们都要运用到资源文件(values)中的xml文件如:颜色资源文件(color.xml)在文件里面设值,虽然我们可以直接填入我们想要的颜色如#fff,但我们为了便于程序的开发,所以我们运用到了资源文件
其中xml app开头的代码是用来定义控件的位置。资源文件值放在最后。
Java代码
//首先申明控件的变量(在主Java文件中)
private TextView textMessage;
private EditText textEdit;
private Button button
//然后在Oncreate中对应绑定控件
textMessage = findViewById(R.id.textView2);
textEdit = findViewById(R.id.editText);
button = findViewById(R.id.button);
//按钮的单机监听事件
button.setOnClickListener(new View.OnClickListener() {
@SuppressLint("SetTextI18n")
@Override
public void onClick (View v) {
textMessage.setText("我的爱好是"+textEdit.getText());
}
});
单选按钮(RadioButton)和复选框(checkbox)
单选框是一种双状态的按钮,可以选中和不选中。在单选按钮没有被选中时,用户可以来单机选着它。但是复选框不一样。
多个单选按钮要用RadioGroup同时使用,这样才能做出单选题那种感觉。而复选框不用,这里用一个实例来展现常用方法。点击选择按钮这把值反馈到上个例子的文本控件上。
xml代码
//单选
<RadioGroup
android:id="@+id/radioGroup"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toTopOf="@+id/guideline8"
app:layout_constraintEnd_toStartOf="@+id/guideline9"
app:layout_constraintStart_toStartOf="@+id/guideline3"
app:layout_constraintTop_toTopOf="@+id/guideline8">
<RadioButton
android:id="@+id/radioButton2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/book" />
<RadioButton
android:id="@+id/radioButton1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/game" />
</RadioGroup>
//复选
<CheckBox
android:id="@+id/checkBox2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/game"
app:layout_constraintBottom_toTopOf="@+id/guideline10"
app:layout_constraintEnd_toStartOf="@+id/guideline4"
app:layout_constraintHorizontal_bias="0.493"
app:layout_constraintStart_toStartOf="@+id/guideline9"
app:layout_constraintTop_toTopOf="@+id/guideline10"
app:layout_constraintVertical_bias="0.531" />
<CheckBox
android:id="@+id/checkBox3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/book"
app:layout_constraintBottom_toTopOf="@+id/guideline8"
app:layout_constraintEnd_toStartOf="@+id/guideline4"
app:layout_constraintHorizontal_bias="0.493"
app:layout_constraintStart_toStartOf="@+id/guideline9"
app:layout_constraintTop_toTopOf="@+id/guideline8"
app:layout_constraintVertical_bias="0.312" />
Java代码实现
private RadioButton radioButton1;
private RadioButton radioButton2;
//单选按钮,复选按钮实例化
RadioGroup radioGroup = findViewById(R.id.radioGroup);
radioButton1 = findViewById(R.id.radioButton1);//游戏
radioButton2 = findViewById(R.id.radioButton2);//看书
//按钮选中事件
radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@SuppressLint("SetTextI18n")
@Override
public void onCheckedChanged (RadioGroup group, int checkedId) {
if(radioButton1.isChecked()){//这里条件可以用checkedId=1,代表编号
textMessage.setText("我的爱好是" + radioButton1.getText());
}else if(radioButton2.isChecked()){
textMessage.setText("我的爱好是" + radioButton2.getText());
}
}
});
private CheckBox checkBox2;
private CheckBox checkBox3;
checkBox2 = findViewById(R.id.checkBox2);
checkBox3 = findViewById(R.id.checkBox3);
//添加事件
checkBox2.setOnCheckedChangeListener(cb);
checkBox3.setOnCheckedChangeListener(cb);
//复选款cb事件 这里是一个单独的方法
private CompoundButton.OnCheckedChangeListener cb = new CompoundButton.OnCheckedChangeListener() {
@SuppressLint("SetTextI18n")
@Override
public void onCheckedChanged (CompoundButton buttonView, boolean isChecked) {
String str1 = checkBox2.getText().toString();
String str2 = checkBox3.getText().toString();//获取按钮文字
if(checkBox2.isChecked() && checkBox3.isChecked()){
textMessage.setText("我的爱好是" + str1 + "和" + str2);
}else if(checkBox2.isChecked() && !checkBox3.isChecked()){
textMessage.setText("我的爱好是" + str1);
}else if (!checkBox2.isChecked() && checkBox3.isChecked()){
textMessage.setText("我的爱好是" + str2);
}else if(!checkBox2.isChecked() && !checkBox3.isChecked()){
textMessage.setText("我的爱好是");
}
}
};
下拉列表框(spinner)
Spinner 控件是一种列表类型控件,当用户选择,可以提供一个下拉列表项出来共用户选择。这里创建一个下拉列表并点击下拉列表把值显示到文本控件中
xml代码
<spinner
android:id="@+id/spinner"
android:layout_width="255dp"
android:layout_height="25dp"
app:layout_constraintBottom_toTopOf="@+id/guideline11"
app:layout_constraintEnd_toStartOf="@+id/guideline4"
app:layout_constraintHorizontal_bias="0.515"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@+id/guideline11"
app:layout_constraintVertical_bias="0.52" />``
Java代码
private Spinner spinner;
private ArrayAdapter<String> adapter;
//下拉列表框
spinner = findViewById(R.id.spinner);
@SuppressLint("ResourceType") String[] sList = getResources().getStringArray(R.array.spinner_date);//选择资源文件的值
adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item,sList);
spinner.setAdapter(adapter);
spinner.setOnItemSelectedListener(new Spinner.OnItemSelectedListener() {
@SuppressLint("SetTextI18n")
@Override
public void onItemSelected (AdapterView<?> parent, View view, int position, long id) {
textMessage.setText("我的爱好是:" + adapter.getItem(position) );
//这里明确position编号第一个是0
}
@SuppressLint("SetTextI18n")
@Override
public void onNothingSelected (AdapterView<?> parent) {
textMessage.setText("noll");
}
});
自动提示控件(AutoCompleteTextView)
当我们搜索东西是,词条会给我们搜索的东西加以提示
控件的三个重要方法:
- clearListSelection():清除选中列表项
- dismissDropDown:如果存在则关闭下拉菜单
- getAdapter():获得适配器
实现代码
<AutoCompleteTextView
android:id="@+id/autoCompleteTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/auto_text"
app:layout_constraintBottom_toTopOf="@+id/guideline12"
app:layout_constraintEnd_toStartOf="@+id/guideline4"
app:layout_constraintStart_toStartOf="@+id/guideline3"
app:layout_constraintTop_toTopOf="@+id/guideline12"
tools:ignore="LabelFor" />
//自动提示输入框
autoCompleteTextView = findViewById(R.id.autoCompleteTextView);
String[] aList = getResources().getStringArray(R.array.spinner_date);
ArrayAdapter<String> adapter1 = new ArrayAdapter<>(this, android.R.layout.simple_dropdown_item_1line,aList);
autoCompleteTextView.setAdapter(adapter1);
资源文件代码
//string
<resources>
<string name="app_name">MyApplication</string>
<string name="text_welcome">欢迎来到此界面</string>
<string name="button_go">确定输入</string>
<string name="text_edit1">请输入你的爱好</string>
<string name="game">游戏</string>
<string name="book">看书</string>
<string name="spinner_title">选着你的爱好</string>
<string name="auto_text">AutoCompleteTextView</string>
<string-array name="spinner_date">
<item>看书</item>
<item>游戏 </item>
</string-array>
</resources>
//dimens
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="text_size" >40sp</dimen>
<dimen name="text_edit">30sp</dimen>
</resources>
//color
<resources>
<color name="colorPrimary">#6200EE</color>
<color name="colorPrimaryDark">#3700B3</color>
<color name="colorAccent">#03DAC5</color>
<color name="text_welcome_color">#FFF44336</color>
</resources>