zoukankan      html  css  js  c++  java
  • Android活动(Activity)Toast和Menu

    上一篇我们介绍了活动的一些基本知识,也了解了如何创建一个主活动。这篇我们说说使用率相当高的Toast(吐司)和Menu。

    Toast

    Toast是什么?

      我说名词有的人应该不知道这个是什么,但我截个图大家就全明白了:

    我们使用app的时候不免会有一些提示,这些比较简短、一段时间之后隐藏,并且不占用屏幕空间的提示,就是我们说的Toast。

    Toast的使用

     首先贴上代码:

    布局文件:

    1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    2     android:layout_width="match_parent"
    3     android:layout_height="match_parent">
    4     <Button
    5         android:layout_width="wrap_content"
    6         android:layout_height="wrap_content"
    7         android:text="点我点我"
    8         android:id="@+id/button"/>
    9 </LinearLayout>

    Java文件:

     1 package com.example.toastdemo;
     2 
     3 import android.support.v7.app.AppCompatActivity;
     4 import android.os.Bundle;
     5 import android.view.View;
     6 import android.widget.Button;
     7 import android.widget.Toast;
     8 
     9 public class MainActivity extends AppCompatActivity
    10 {
    11 
    12     @Override
    13     protected void onCreate(Bundle savedInstanceState)
    14     {
    15         super.onCreate(savedInstanceState);
    16         setContentView(R.layout.activity_main);
    17         Button button = (Button) findViewById(R.id.button);
    18         button.setOnClickListener(new View.OnClickListener()
    19         {
    20             @Override
    21             public void onClick(View v)
    22             {
    23                 Toast.makeText(MainActivity.this,"雷吼啊",Toast.LENGTH_SHORT).show();
    24             }
    25         });
    26     }
    27 }

    我们重点关注Java17-25行:

    17行我们定义了一个按钮,将这个按钮与我们布局文件中的按钮进行绑定。我们是用findViewById(R.id.button)方式获取到我们的按钮对象的,因为这个方法返回来的是一个View对象(View对象是android所有空间的基类),所以我们要将这个对象向下转型为我们需要的Button类的对象,然后我们将Button的id传入进方法的参数就可以了。

    接下来我们为这个按钮设置了一个监听器,监听点击事件。我们设置监听事件最常用的方法就是使用匿名内部类方式(因为真的是方便,在AS里面你只需要一个tab就可以把框架给补全)。当我们点击按钮的时候,就会执行我们的Toast方法了。

    我们看到,makeTest的调用并没有建立对象,所以这个方法一定是一个静态方法。这个方法有三个参数:

    1.Context context  这个直译是上下文的意思。我们简单介绍下上下文是什么意思。

    在Android中,用户所有的与系统进行交互的场景都被抽象为上下文。我们所有的操作都是有一个背景或者是环境的。比如,我们在聊QQ,这里的“环境”就指我们聊天的界面,后台数据的传输。具体到我们这个,我们Toast弹出的“环境”就是我们的MainActivity。又因为我们是在内部类进行的操作,所以我们需要使用MainActivity.this来获取外部类对象。也就是说,外部类对象就是我们的“上下文”。

    2. String text 这个很好理解,就是我们Toast要弹出的字符串。

    3.int time  Toast要显示的时间。系统提供给了我们两个常量:Toast.LENTH_SHORT和Toast.LENTH_LONG。

    这样我们就可以弹出我们的Toast了。

     Menu的使用

    menu也是很常见的一个控件:

     

    当我们有很多的菜单项需要显示,把他们全部放到我们的页面上是不现实的。这时候我们可以定义一个“收纳箱”将他们收纳进去。

    首先,我们需要有一个Menu布局文件:

    在res目录下右键,新建一个Directory,命名为menu。

    然后在menu右键,新建一个Menu Resource file

    然后我们的菜单添加选项:

     1 <?xml version="1.0" encoding="utf-8"?>
     2 <menu xmlns:android="http://schemas.android.com/apk/res/android">
     3 
     4     <item
     5         android:id="@+id/item_1"
     6         android:title="泷泽萝拉" />
     7     <item
     8         android:id="@+id/item_2"
     9         android:title="波多野结衣" />
    10 </menu>

     我们定义了两个项,然后分别定义了id。这样我们的Menu菜单项布局就有了。

    接下来我们需要将布局导入进逻辑。

    我们在MainActivity.java重写(ctrl+o可以快速重写,在弹出框中键入关键字可以快速定位)onCreateOpinionsMenu方法,这个方法就是系统提供给我们的添加菜单项的方法,我们只需要在这里面添加自己的逻辑就行了。

    1 @Override
    2 public boolean onCreateOptionsMenu(Menu menu)
    3 {
    4     getMenuInflater().inflate(R.menu.main, menu);
    5     return true;
    6 }

     

    getMenuInflater()返回了一个MenuInflater对象,然后再调用对象的inflate()方法就可以为当前活动创建菜单了。

    inflate接收两个参数:第一个是我们Menu的资源文件,第二个表示我们要将这个菜单项要添加到哪个Menu对象中去,然后我们返回true表示显示这个菜单项。

    解释下Inflater:android讲究视图与逻辑分离,我们如果想用传统意义上的方法去添加菜单项,就需要自己去手动用menu.add()添加,就像下面这样:

    1  @Override
    2  public boolean onCreateOptionsMenu(Menu menu)
    3  {
    4      menu.add("泷泽萝拉");
    5      menu.add("波多野结衣");
    6      return true;

    发现效果是一样的。

    但是我们如果有好多个菜单项,这种方法是非常繁琐的。这时候我们就可以采用"直接将布局文件实例化"然后得到文件中的所有选项,这个容器就是MenuInflater。Activity类中的getMenuInflater方法可以获取到这个活动的MenuInflater,并且用MenuInflater().inflate方法可以来设置这个menu的菜单项。

     为Menu添加点击事件

    同样,我们可以重写系统给我们提供的方法来实现点击事件。重写onOptionsItemSelected方法,并且为其添加点击事件:

     1 @Override
     2 public boolean onOptionsItemSelected(MenuItem item)
     3 {
     4     switch (item.getItemId())
     5     {
     6         case R.id.item_1:
     7             Toast.makeText(MainActivity.this, "这是泷泽老师", Toast.LENGTH_SHORT).show();
     8             break;
     9         case R.id.item_2:
    10             Toast.makeText(MainActivity.this,"这是波老师",Toast.LENGTH_SHORT).show();
    11             break;
    12         default:
    13     }
    14     return true;
    15 }

    这个方法接收菜单子项对象,然后我们根据每一项的id来分别处理逻辑事件。

    一切正常!

    ok,这一篇就到这了。

  • 相关阅读:
    VS2008编写MFC程序--使用opencv2.4()
    November 02nd, 2017 Week 44th Thursday
    November 01st, 2017 Week 44th Wednesday
    October 31st, 2017 Week 44th Tuesday
    October 30th, 2017 Week 44th Monday
    October 29th, 2017 Week 44th Sunday
    October 28th, 2017 Week 43rd Saturday
    October 27th, 2017 Week 43rd Friday
    October 26th, 2017 Week 43rd Thursday
    October 25th, 2017 Week 43rd Wednesday
  • 原文地址:https://www.cnblogs.com/KangYh/p/9921670.html
Copyright © 2011-2022 走看看