Android User Interface3:Menu Toast&移動終端軟件開發課程&StudyAccount4 2018.10.9

菜單

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.下拉菜單

Spinner
使用步驟如下:
(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

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 );//經過多長時間關閉該任務
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章