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.thisToast显示的文本内容
- Toast显示的时长
内置常量可选择
Toast.LENGTH_SHORT
和Toast.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,出现错误
- Android基础(三)
- Android Notification 基础 (三)
- android基础---textView(三)
- Android基础总结(三)
- Android基础学习(三)
- Android近场通信---NFC基础(三)
- Android基础综合案例(三)
- Android近场通信---NFC基础(三)
- Android近场通信---NFC基础(三)
- 【Android基础】(9)UI控件(三)
- Android基础系列之资源(三)
- Android 基础总结:(三)Activity
- <Android 基础(三)> MVP模式
- 【Android基础】三、四大组件(一)
- Android RecyclerView基础学习(三)
- Android 自定义view基础(三)
- Android 基础篇(三)细节
- Android组件activity_基础(三)
- C++ 常用泛型算法的使用
- 多图详解Spring框架的设计理念与设计模式
- JMM和synchronize的一些记录:
- JVM内存区域介绍
- 软件测试的一些理解
- Android基础(三)
- Leetcode 234. Palindrome Linked List (Easy) (cpp)
- Integer to English Words
- 关于解决git冲突
- jQuery学习<一> — — 安装
- KMP模板
- 计算类的大小--字节对齐
- 可访问性不一致: 属性类型“ ”比属性“ ”的可访问性低
- GeekBand第十周笔记