1.上下文菜单
使用步骤如下:
(1)在Activity中使用上下文菜单,复写onCreateContextMenu() 和 onContextItemSel- ected()方法;
(2)为视图控件View中注册上下文菜单,使用registerForContextMenu()方法。
(3)在onCreateContextMenu(…ContextMenu menu)中添加菜单项menu.add(…);
(4)在onContextItemSelected()中通过设置菜单的id来实现菜单子项的监听。
- 界面
<TextView
android:id="@+id/textView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="上下文菜单,请“长按”我\n选项菜单,请点击右上角。"
android:textColor="@color/colorPrimary"
android:textSize="30dp" />
- JAVA
1.变量声明定义、注册上下文菜单
public TextView myMenu;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myMenu=(TextView)findViewById(R.id.textView);
registerForContextMenu(myMenu);
}
2.复写onCreateContextMenu()方法,当上下文菜单被创建时回调该函数
@Override//注意复写前一定要写这个!!
public void onCreateContextMenu(ContextMenu menu, View v,ContextMenu.ContextMenuInfo menuInfo){
if(v==myMenu){
//创建菜单项
menu.add(0,1,0,"我是菜单1");
menu.add(0,2,0,"我是菜单2");
menu.add(0,3,0,"我是菜单3");
super.onCreateContextMenu(menu,v,menuInfo);
}
}
3.复写onContextItemSelected()方法,当上下文菜单某项被选中时回调该函数
@Override
public boolean onContextItemSelected(MenuItem item){
switch (item.getItemId()){
case 1:
Toast.makeText(MainActivity.this,"菜单1",Toast.LENGTH_SHORT).show();
break;
case 2:
Toast.makeText(MainActivity.this,"菜单2",Toast.LENGTH_SHORT).show();
break;
case 3:
Toast.makeText(MainActivity.this,"菜单3",Toast.LENGTH_SHORT).show();
break;
}
return true;
}
2.选项菜单
1>直接用menu.add()
使用步骤如下:
(1)在Activity中复写onCreateOptionsMenu(…)和onOptionsItemSelected(…)方法;
(2)在onCreateOptionsMenu(Menu menu)中添加菜单选项,有两种方式:a、调用menu.add(…),b、从布局文件中添加,在res下新建menu文件夹,创建menu文件,填写相应的选项;
(3)在onOptionsItemSelected(…)通过设置菜单的id来实现菜单子项的监听。
- 复写onCreateOptionsMenu()方法
@Override
public boolean onCreateOptionsMenu(Menu menu){
menu.add(0, 1, 0, "计算机科学与技术");
menu.add(0, 2, 0, "网络工程");
menu.add(0, 3, 0, "信息安全");
return true;
}
- 复写onOptionsItemSelected()方法,选项被选择时回调该方法
@Override
public boolean onOptionsItemSelected(MenuItem item){
switch (item.getItemId()) {
case 1:
Toast.makeText(MainActivity.this, "我是计算机科学与技术", Toast.LENGTH_SHORT).show();
break;
case 2:
Toast.makeText(MainActivity.this, "我是网络工程", Toast.LENGTH_SHORT).show();
break;
case 3:
Toast.makeText(MainActivity.this, "我是信息安全", Toast.LENGTH_SHORT).show();
break;
}
return true;
}
2>利用布局文件创建选项菜单
3.下拉菜单
使用步骤如下:
(1)获得Spinner实例对象,在布局文件中获得或代码中均可;
(2)为Spinner配置一个数据适配器(ListAdapter,后面小节有详细讲解)用来提供数
据的显示的控制;
(3)监听Spinner的数据点击事件。
- 界面
<TextView
android:id="@+id/textView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="TextView"
android:textSize="20dp"
android:textColor="@color/colorPrimary"/>
<Spinner
android:id="@+id/spinner"
android:layout_width="match_parent"
android:layout_height="wrap_content"></Spinner>
- 核心代码
private TextView textView;
private Spinner spinner;
private List<String>list;
private ArrayAdapter<String>adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView=(TextView)findViewById(R.id.textView);
spinner=(Spinner)findViewById(R.id.spinner);
textView.setText("您选择的城市是北京");
//1.设置数据源
list=new ArrayList<>();
list.add("北京");
list.add("上海");
list.add("广州");
list.add("深圳");
list.add("保定");
//2.定义适配器
adapter=new ArrayAdapter<>(this,android.R.layout.simple_spinner_item,list);
//3.设置下拉样式
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
//4.spinner加载适配器
spinner.setAdapter(adapter);
//5.spinner设置监听器
spinner.setOnItemClickListener(this);
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
String cityName=adapter.getItem(position);
textView.setText("您选择的城市是:"+cityName);
}
4.Toast
- 线性布局
<Button
android:id="@+id/button1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Toast Long (3.5秒)"
android:onClick="btnToast1"/>
<Button
android:id="@+id/button2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Toast Short (2秒)"
android:onClick="btnToast2" />
<Button
android:id="@+id/button3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Toast 自定义图标"
android:onClick="btnToast3" />
<Button
android:id="@+id/button4"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Toast 自定义XML载入"
android:onClick="btnToast4"/>
<Button
android:id="@+id/button5"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Toast 自定义显示时长"
android:onClick="btnToast5" />
<TextView
android:id="@+id/textView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="@color/colorPrimary"
android:text=" Toast\n
Android系统提供的一种提示方式,\n
在程序中可以使用它将一些短小的信息通知给用户,\n
这些信息会在一段时间后自动消失,\n
不会占用任何的屏幕空间."
android:textAlignment="center" />
- 核心代码
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void btnToast1(View v){
Toast.makeText(getApplicationContext(),"Toast默认样式",Toast.LENGTH_LONG).show();
}
public void btnToast2(View v){
Toast.makeText(this,"Toast默认样式",Toast.LENGTH_SHORT).show();
}
public void btnToast3(View v){
Toast toast=new Toast(this);
toast.setDuration(Toast.LENGTH_SHORT);//设置Toast显示的时长
ImageView imageView=new ImageView(this);
imageView.setImageResource(R.mipmap.ic_launcher);
toast.setView(imageView);
toast.setGravity(Gravity.FILL_HORIZONTAL|Gravity.CENTER,0,0);
toast.show();
}
public void btnToast4(View v){
Toast toast=new Toast(this);
View layout=View.inflate(this,R.layout.toast,null);
toast.setView(layout);//设置Toast文本,把设置好的布局传进来
toast.setGravity(Gravity.FILL_HORIZONTAL|Gravity.CENTER,0,0);
toast.show();
}
public void btnToast5(View v){
Toast toast=Toast.makeText(this,"可以设置时长的Toast",Toast.LENGTH_LONG);
showMyToast(toast,10*1000);// //第一个参数:我们创建的Toast对象,第二个参数:我们想要设置显示的毫秒数
}
public void showMyToast(final Toast toast,final int cnt){//此方法在 API 24 有效,在 API 26+ 失效
// 该方法创建Toast对象的时候时长因该设置为 Toast.LENGTH_LONG,因为该他的时长就是3秒,与下面的延时时间对应
//cnt:需要显示的时长,毫秒
final Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
toast.show();
}
}, 0, 3000);//每隔三秒调用一次show方法;
new Timer().schedule(new TimerTask() {
@Override
public void run() {
toast.cancel();
timer.cancel();
}
}, cnt );//经过多长时间关闭该任务
}