安卓开发笔记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>
|