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,这一篇就到这了。

  • 相关阅读:
    python中使用cookies免登陆
    python中列表与元组的区别与转换
    python模块之mock
    python模块之Faker
    python模块之requests
    adb简单命令使用
    Mac下安装appium+python+Android sdk 环境完整流程
    git+pycharm结合使用
    github内的一些操作
    mac下git连接远程仓库gitee
  • 原文地址:https://www.cnblogs.com/KangYh/p/9921670.html
Copyright © 2011-2022 走看看