从零开始学Android(三)

来源:互联网 发布:舞台效果图设计软件 编辑:程序博客网 时间:2024/05/16 17:12

好,今天继续补昨天的坑。。。
已经做好了一个带有按钮的活动,我们下一步进行隐藏标题栏。开码!

一. 隐藏标题栏
可以在onCreate方法中添加代码:

    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        requestWindowFeature(Window.FEATURE_NO_TITLE);        setContentView(R.layout.first_layout);    }

用到的方法很简单,字面意思就是对窗体进行设置。需要注意此方发要在setContentView方法之前使用。此方法的参数可以有:
// 1.DEFAULT_FEATURES:系统默认状态,一般不需要指定
// 2.FEATURE_CONTEXT_MENU:启用ContextMenu,默认该项已启用,一般无需指定
// 3.FEATURE_CUSTOM_TITLE:自定义标题。当需要自定义标题时必须指定。如:标题是一个按钮时
// 4.FEATURE_INDETERMINATE_PROGRESS:不确定的进度
// 5.FEATURE_LEFT_ICON:标题栏左侧的图标
// 6.FEATURE_NO_TITLE:无标题
// 7.FEATURE_OPTIONS_PANEL:启用“选项面板”功能,默认已启用。
// 8.FEATURE_PROGRESS:进度指示器功能
// 9.FEATURE_RIGHT_ICON:标题栏右侧的图标

二. 活动中使用Toast
Toast是一种信息提醒方式,信息会在显示一段时间后自动消失,并且不占用任何屏幕空间。
首先要定义弹出Toast信息的触发点,在这里就利用当前活动的按钮来触发。
还是在onCreate方法中进行配置:

    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        requestWindowFeature(Window.FEATURE_NO_TITLE);        setContentView(R.layout.first_layout);        Button button1 = (Button) findViewById(R.id.button_1);        button1.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View v) {                Toast.makeText(FirstActivity.this, "你点击了按钮",                         Toast.LENGTH_SHORT).show();            }        });    }

研究一下这一大堆什么意思:
首先声明了一个Button类的实例命名为button1,在这里有些东西要说明:
活动里显示的控件都叫View,View类是所有控件的父类。若要在活动里获取View,可以用如下方法:

TextView textView=(TextView)findViewBy(R.id.textView)

方法通过ID而获取了一个View对象,通过向下转型而变成Button对象。
然后,我们的目的是点按按钮触发消息,于是利用方法setOnClickListener:
这个方法如字面意思——注册一个点击监听器,他的参数是接口实现匿名类,这个接口必须重写接口方法onClick。
而这个方法的作用就是当监听到点击按钮时,执行其内部代码。内部代码中,利用Toast类调用makeText方法,此方法有三个参数:第一个参数context,即上下文,由于活动本身就是Context对象。如果都是在Activity中使用那没什么区别,都表示当前Activity的实例,如果是在内部类中使用的话Activity.this,还是Activity的实例,但是this就表示当前内部类对象了。所以用Activity.this(这里是FirstActivity.this)即可。第二个参数是Toast消息显示的文本内容。第三个参数是显示的时间长度。

三. 在活动中使用MENU
首先menu类似于按钮,他是一种资源布局。需要在res文件夹下创建资源,这里创建文件夹menu,在文件夹里创建XML布局文件;命名为main。
我们想在menu里创建两个选项(条目);需要在XML里进行配置:

<?xml version="1.0" encoding="utf-8"?><menu xmlns:android="http://schemas.android.com/apk/res/android" >    <item        android:id="@+id/add_item"        android:title="添加" />    <item        android:id="@+id/remove_item"        android:title="删除" /></menu>

同样的,需要在活动里进行配置,对onCreateOptionsMenu进行重写:

    @Override    public boolean onCreateOptionsMenu(Menu menu) {        getMenuInflater().inflate(R.menu.main, menu);        return true;    }

此方法通过getMenuInflater方法得到一个MenuInflater对象,在调用他的inflate方法给当前活动创建菜单,inflate方法接受两个参数,第一个接受ID用于指定通过哪一个资源文件来创建菜单,第二个参数指定菜单将添加到哪一个Menu对象之中,这里可以使用onCreateOptionsMenu方法传入的menu参数,之后给这个方法返回true,表示允许创建该菜单。到这里菜单就可以显示出来了。
下面给菜单添加功能,在活动中重写onOptionsItenSelected方法:

    @Override    public boolean onOptionsItemSelected(MenuItem item) {        switch (item.getItemId()) {        case R.id.add_item:            Toast.makeText(this, "点击添加", Toast.LENGTH_SHORT).show();            break;        case R.id.remove_item:            Toast.makeText(this, "点击删除", Toast.LENGTH_SHORT).show();            break;        default:        }        return true;    }

利用该方法,定义菜单响应。利用item.getItemId方法对菜单选项ID进行选择判断,接着利用Toast.makeTest.show方法进行显示消息响应。
在AVD运行的时候,发现有些SDK版本并不支持menu键,这里我用的安卓2.3.3版本(API10)可以使用menu键。

四. 销毁一个活动
这个很简单,只需要在按钮监听器代码处替换

finish();

就可以完成。

四. 使用显式Intent
先来说下Intent,Intent是android程序中个组件之间进行交互的一种重要方式。他不仅可以指明当前组件想要执行的操作,还可以在不同组件之间进行数据传递。Intent一般可以被用于启动服务、启动活动以及发送广播等场景。Intent大致分为显式与隐式两种用法。
显示用法,Intent利用构造函数重载
Intent(Context packageContext, Class

            @Override            public void onClick(View v) {                Intent intent = new Intent(FirstActivity.this, SecondActivity.class);                startActivity(intent);            }

现在来配置第二个活动SecondActivity布局:

    <Button        android:id="@+id/button_2"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:text="Button 2"        />

之后新建活动,与第一个活动一样,就不贴代码了。最后在AndroidManifest.XML文件中进行注册。只需要在第一个Activity后边增加新的活动,格式和第一个活动一样,但不需要infent-filter来表示第一个执行:

        </activity>        <activity             android:name=".SecondActivity" >        </activity>    </application>

在AVD上运行一下看看吧。昨天就是码到这里出了些没明奇妙的错误,所以接下来的内容放到下一篇。

0 0
原创粉丝点击