0%

安卓开发笔记2

安卓开发笔记2

(随手写的,不具有参考价值)

Toast

Toast 是一个View视图,用于显示临时的信息,不会与用户进行交互。
它可以显示一个字符串,也可以显示一个View对象。
显示字符串时,可以在activity里调用

1
Toast.makeText(getApplicationContext(),"要显示的字符串",Toast.LENGTH_SHORT).show();

第三个参数是Toast显示的时长,可以换成Toast.LENGTH_LONG,或者用数字直接指定时长,如2000指定2000ms。

显示View时,可以调用setView(view)方法,还可以用setGravity()方法来定位。

Notification

学习这部分内容的时候遇到了各种版本不兼容的问题,暂时跳过,以后在补。

AutoCompleteTextView

AutoCompleteTextView用于输入时的自动补全。它在xml文件中的添加方式与TextView差不多。在activity中需要为它创建一个ArrayAdapter适配器,再调用setAdapter()函数。下面是一个示例:

1
2
3
4
5
6
7
8
9
10
11
12
public class MainActivity extends AppCompatActivity {
AutoCompleteTextView atv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
atv=findViewById(R.id.actv_1);
String [] strs={"abc","abcd","geiwj","wbgoiejoje","略略略略略略"};
ArrayAdapter<String>adapter=new ArrayAdapter<String>(this,R.layout.support_simple_spinner_dropdown_item,strs);
atv.setAdapter(adapter);
}
}

值得注意的是在app中需要输入至少两个字母或者汉字,AutoCompleteTextView才会进行提示。
还可以在res/values中添加一个arrays.xml文件,在里面添加一些字符串内容,就不用在activity文件中定义一个String数组了。

1
2
3
4
5
6
7
8
9
10
11
<?xml version="1.0" encoding="utf-8"?>
<string-array name="autoStrings">
<item>这这这</item>
<item>那那那</item>
<item>服服服</item>
<item>事实上</item>
<item>啊啊啊</item>
<item>wegnewkngeknflek</item>
<item>我我我</item>
</string-array>
</resources>

然后就可以在将adapter的定义改为

1
ArrayAdapter<String>adapter=new ArrayAdapter<String>(this,R.layout.support_simple_spinner_dropdown_item,getResources().getStringArray(R.array.autoStrings));

对话框

对话框用于弹出一个子界面,并代替原有的界面来与用户交互。常用的对话框有提示对话框AlterDialog、进度对话框ProcessDialog、日期选择对话框DatePickerDialog和时间选择对话框TimePickerDialog等。

提示对话框AlterDialog

AlterDialog需要用AlterDialog.Builder来创建。一般我们定义一个AlterDialog.Builder变量,然后调用它的各种set()方法,最后调用它的show()方法显示对话框。
常用的方法有setTitle()显示标题,setMessage()方法显示内容,setNegativeButton()、setPositiveButton()和setNeutralButton()方法显示一个按钮。
一个示例程序如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class MainActivity extends AppCompatActivity {
AutoCompleteTextView atv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btnstart=findViewById(R.id.bt_1);
btnstart.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
AlertDialog.Builder myDialog=new AlertDialog.Builder(MainActivity.this);
myDialog.setTitle("提示");
myDialog.setMessage("这是一个AlertDialog对话框");
myDialog.setPositiveButton("是",null);
myDialog.setNegativeButton("否",null);
myDialog.setNeutralButton("取消",null);
myDialog.show();
}
});
}
}

进度条对话框ProgressDialog

ProgressDialog的用法与AlertDialog差不多。
用setProgressStyle()方法可以设置ProgressDialog的样式,ProgressDialog.STYLE_HORIZONTAL表示水平进度条,ProgressDialog.STYLE_SPINNER表示圆形进度条。如果希望ProgressDialog不能被取消,可以调用ProgressDialog.Cancelable(false)。
一个示例程序如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
public class MainActivity extends AppCompatActivity {
private Button bt_1,bt_2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bt_1=findViewById(R.id.bt_1);
bt_2=findViewById(R.id.bt_2);
bt_1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ProgressDialog progressDialog=new ProgressDialog(MainActivity.this);
progressDialog.setTitle("提示信息");
progressDialog.setMessage("正在下载中,请稍候");
progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
progressDialog.show();
}
});
bt_2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ProgressDialog progressDialog=new ProgressDialog(MainActivity.this);
progressDialog.setTitle("提示信息");
progressDialog.setMessage("正在下载中,请稍候");
progressDialog.setMax(100);
progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
progressDialog.show();
}
});
}
}

列表控件ListView

ListView以列表的形式展示内容,当用户点击内容是可以进行交互。与AutoCompleteTextView一样,ListView也需要配置适配器,一般使用ArrayAdapter。ListView的列表项Item被单击会触发OnItemClick事件,被选择会触发OnItemSelect事件,我们可以定义响应两种事件的方法。
我们可以自定义Item的布局,也可以使用Android系统提供的R.layout.simple_list_item_1。
自定义时需要在layout里创建一个xml文件,示例代码如下:

1
2
3
4
5
6
7
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="10dp"
android:textSize="18sp">
</TextView>

ListView的常用属性还有divider和dividerHeight,前者可以设置相邻两个列表项的分界线样式,后者可以设置分界线高度。

在activity_main.xml中可以这样添加ListView控件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="fill_parent"
android:layout_width="fill_parent"
android:orientation="vertical">
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/tv_message"
android:text="ListView示例\n">
</TextView>
<ListView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/listview"
android:background="#cccccc">
</ListView>
</LinearLayout>

然后可以编写MainActivity.java的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ListView myListView=findViewById(R.id.listview);
ArrayAdapter<String>adapter=new ArrayAdapter<String>(this,R.layout.list_item,getResources().getStringArray(R.array.autoStrings));
myListView.setAdapter(adapter);
myListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
String ItemString=((TextView)view).getText().toString();
Toast.makeText(MainActivity.this,"您单击了列表项:"+ItemString,Toast.LENGTH_SHORT).show();
}
});
myListView.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
String ItemString=((TextView)view).getText().toString();
Toast.makeText(MainActivity.this,"您选择了列表项:"+ItemString,Toast.LENGTH_SHORT).show();
}
@Override
public void onNothingSelected(AdapterView<?> parent) {

}
});
}
}

下拉列表Spinner

它与ListView基本一样,不再赘述。

DatePicker

DatePicker用于让用户选择当前日期,日期范围是1900年1月1日到2100年12月31日。改变日期会触发onDateChanged事件,所以要实现DatePicker.OnDateChangedListener中的onDateChanged()方法。
在xml布局文件中定义DatePicker的方法跟其他控件基本一样,不再赘述。
示例程序如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class MainActivity extends Activity {
private DatePicker myDatePicker;
private TextView textDate;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
this.setTitle("日期控件的示例");
textDate=findViewById(R.id.tv_1);
myDatePicker=findViewById(R.id.dp_1);
Calendar calendar=Calendar.getInstance(Locale.CHINA);
int year=calendar.get(Calendar.YEAR);
int month=calendar.get(Calendar.MONTH);
int day=calendar.get(Calendar.DAY_OF_MONTH);
myDatePicker.init(year,month,day,new DatePicker.OnDateChangedListener(){
public void onDateChanged(DatePicker view,int y,int m,int d){
textDate.setText("\n您选择的日期是:"+y+"年"+(m+1)+"月"+d+"日");
}
});
}
}

TimePicker

与DatePicker基本一样,不再赘述。

DatePickerDialog和TimePickerDialog

这两个是弹一个对话框出来,跟AlertDialog差不多。
参考程序如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
this.setTitle("日期和时间选择对话框");

Button bt_1=findViewById(R.id.bt_1),bt_2=findViewById(R.id.bt_2);
bt_1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
DatePickerDialog datePickerDialog=new DatePickerDialog(MainActivity.this);
datePickerDialog.setOnDateSetListener(new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
Toast.makeText(getApplicationContext(),"日期:"+year+"-"+(month+1)+"-"+dayOfMonth,Toast.LENGTH_SHORT).show();
}
});
datePickerDialog.show();
}
});
bt_2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
TimePickerDialog timePickerDialog=new TimePickerDialog(MainActivity.this, new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
Toast.makeText(getApplicationContext(),"Time: "+hourOfDay+":"+minute,Toast.LENGTH_SHORT).show();
}
},14,55,true);
timePickerDialog.show();
}
});
}
}

AnalogClock和DigitalClock

Analog用于显示模拟时钟,DigitalClock用于显示数字时钟。只需要在xml文档里声明一下即可:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_height="fill_parent"
android:layout_width="fill_parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="数字时钟:">
</TextView>
<DigitalClock
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</DigitalClock>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="模拟时钟:">
</TextView>
<AnalogClock
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</AnalogClock>
</LinearLayout>