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 );//經過多長時間關閉該任務
}