Android基础(三)

来源:互联网 发布:minecraft java版 编辑:程序博客网 时间:2024/04/30 18:02

活动(Activity)

活动是一种可以包含用户界面的组件
主要用于和用户进行交互

以下为添加了一个button的HelloWorld程序

public class login extends AppCompatActivity {    //继承自AppCompatActivity    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);//最基本的,默认的onCreate()        //项目中任何活动都要重写Activity的onCreate()方法        setContentView(R.layout.activity_login);        //为活动加载一个布局    }}
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:paddingBottom="@dimen/activity_vertical_margin"    android:paddingLeft="@dimen/activity_horizontal_margin"    android:paddingRight="@dimen/activity_horizontal_margin"    android:paddingTop="@dimen/activity_vertical_margin"    tools:context="com.example.administrator.logintest.login">    <TextView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="Hello World!"        android:id="@+id/textView" />    <Button        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="New Button"        android:id="@+id/button"        android:layout_below="@+id/textView"        android:layout_toRightOf="@+id/textView"        android:layout_toEndOf="@+id/textView" /></RelativeLayout>
  • android:id是给当前元素定义一个唯一的标识符

与在XML中引用资源的语法类似
用@+id/id_name的语法定义一个id

  • android:layout_width指定宽度,wrap_content表示刚好包含,match_parent让当前元素和父元素一样属性

然后需要在AndroidManifest文件中注册
<application>标签内对活动使用<activity>标签进行注册声明

  • android:name活动名称
  • android:lable活动标题,显示在活动最顶部,会成为启动器(Launcher)中应用程序显示的名称
  • 若需隐藏,在setContentView()之前执行requestWindowFeature(Window.FEATURE_NO_TITLE)语句
             <intent-filter>                <action android:name="android.intent.action.MAIN" />                <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>

这段代码声明意为让此活动成为程序的主活动,即点击应用图标 首先打开的活动


补充:之前lable隐藏失败,百度后发现是Activity继承的不对
public class login extends AppCompatActivity
修改为继承自Activity即可


在活动中使用Toast

Toast是安卓系统提供的提醒方式,在程序使用中将短小的信息通知给用户,在一段时间后消失

以下为对button实现toast方法的示例

    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        requestWindowFeature(Window.FEATURE_NO_TITLE);        setContentView(R.layout.activity_login);        Button button1=(Button) findViewById(R.id.button);        button1.setOnClickListener(new View.OnClickListener(){            @Override            public void onClick(View v){                Toast.makeText(login.this,"You clicked Button",Toast.LENGTH_SHORT).show();            }        });    }

注意点

  • 在AS中对Button需要指定(alt +Enter)为View.Button
  • 一开始写的是 button1.setOnClickListener(new OnClickListener()提示说onClickListener()有两个意项,指定为view.onClickListener()
  • 注意大小写

在活动中,可以通过findViewById()方法获取到在布局文件中定义的元素,这里传入R.id.button()来得到按钮的实例

findViewById()方法返回的是一个View对象,我们需要向下转型为Button对象(Button) findViewById(R.id.button);

通过调用setOnClickListener()方法为按钮注册一个监听器,点击按钮就会执行监听器的OnClick()方法,Toast就在其中实现

Toast用法
用静态方法makeTest()创建一个Toast对象,然后调用show()显示
makeTest()有三个参数

  • Context

    为Toast要求的上下文
    这里活动本身就是一个Context对象,因此直接传入login.this

  • Toast显示的文本内容

  • Toast显示的时长

    内置常量可选择Toast.LENGTH_SHORTToast.LENGTH_LONG


在活动中使用Menu

File->New->android resource fileresource type:menu修改代码
<menu xmlns:android="http://schemas.android.com/apk/res/android"><item    android:id="@+id/add_item"    android:title="Add"/><item    android:id="@+id/remove_item"    android:title="Remove"/></menu>
这里创建了两个菜单项,``标签用来创建具体的一个菜单项android:id 指定唯一标识符android:title指定菜单项名称在Activity(此处为login中重写onCreateOptionMenu()
    public boolean onCreateOptionsMenu(Menu menu){        getMenuInflater().inflate(R.menu.amenu,menu);        return true;    }

这里getMenuInflater()方法可以得到MenuInflater对象,然后调用inflate()方法就可以给当前活动创建菜单.
inflate()接受两个参数显示出来

  • 第一个参数用于指定我们通过哪一个资源文件创建菜单,这里传入R.menu.main
  • 第二个参数用于指定我们菜单项将添加到哪个Menu对象中,这里使用onCreateOptionMenu()方法中传入的menu参数,然后返回true,表示允许创建的菜单显示出来,false则无法显示

关于inflater()

通俗的说,inflate就相当于将一个xml中定义的布局找出来.
  
  因为在一个Activity里如果直接用findViewById()的话,对应的是setConentView()的那个layout里的组件.
  
  因此如果你的Activity里如果用到别的layout,比如对话框上的layout,你还要设置对话框上的layout里的组件(像图片ImageView,文字TextView)上的内容,你就必须用inflate()先将对话框上的layout找出来,然后再用这个layout对象去找到它上面的组件,如:
  

  Viewview=View.inflate(this,R.layout.dialog_layout,null);    TextViewdialogTV=(TextView)view.findViewById(R.id.dialog_tv);    dialogTV.setText("abcd");

如果组件R.id.dialog_tv是对话框上的组件,而你直接用this.findViewById(R.id.dialog_tv)肯定会报错.
  
  三种方式可以生成LayoutInflater:
LayoutInflaterinflater=LayoutInflater.from(this);
  
  LayoutInflaterinflater=getLayoutInflater();
  
  LayoutInflaterinflater=(LayoutInflater)this.getSystemService(LAYOUT_INFLATER_SERVICE);

然后调用inflate方法将xml布局文件转成View
  
  publicViewinflate(intresource,ViewGrouproot,booleanattachToRoot)
  
在View类中,也有inflate方法
  
  publicstaticViewinflate(Contextcontext,intresource,ViewGrouproot)
  转自安卓中文网

定义菜单响应事件
在Activity(此处为login)中重写onOptionsItemSelected()方法

    public boolean onOptionsItemSelected(MenuItem item){        switch (item.getItemId()){            case R.id.add_item:                Toast.makeText(this,"You clicked Add",Toast.LENGTH_SHORT);                break;            case R.id.remove_item:                Toast.makeText(this,"You clicked Remove",Toast.LENGTH_SHORT);                break;            default:        }        return true;    }

在此方法中,调用item.getItemId()来判断点击哪个菜单项,

在按下menu键的时候显示开始菜单


销毁一个活动

按一下back键就可以销毁当前活动,当然也可以通过代码销毁

在活动中调用finish()方法即可,效果和back一样.


补充:血的教训

写程序一定要注意细节
之前onCreatOptionMenu写错create少了个e,options少了s,出现错误

0 0
原创粉丝点击