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 );//经过多长时间关闭该任务
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值