?
Android菜鸟日记
24 android小技巧
?
用button控件实现按钮效果
?
Button控件例子
<Button android:id="@+id/bt1"android:layout_width="wrap_content"
android:background="@drawable/selector_button1"
android:layout_height="wrap_content" android:onClick="funClick" />
?
其中android:background="@drawable/selector_button1"
指向的是一个存在于 res/drawable文件夹下的selector_button1.xml文件
内容如下
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> ?<item android:state_pressed="true" ?android:drawable="@drawable/d_start" /> <!-- pressed --> <item android:state_focused="true" ?android:drawable="@drawable/start" /> <!-- focused --> <item android:drawable="@drawable/start" /> <!-- default --> </selector> ? Selector为选择器 作为button控件的 的选择器 其中三个item为相对用的值。 三个item就不解释了 这个英语我都能看懂你们也应该能看懂 |
?
????????????????????????????????????????????????????????????????????
?
用android:onClick实现监听按钮点击
一般来说 view的监听都是或得到view对象后给他设置监听器,以内部类的形式,首先我很讨厌内部类,感觉复杂了代码。那么有些人就用view所在的activty去实现监听接口然后用activity来监听,我以前是这么做但是我学会了用android:onClick后我一般都是使用android:onClick方法。
还是Button控件例子[xx.xml(布局文件)中内容]
<Button android:id="@+id/bt1"android:layout_width="wrap_content"
android:background="@drawable/selector_button1"
android:layout_height="wrap_content" android:onClick="funClick" />
?
android:onClick="funClick"
这句话什么意思呢?
?
它指的是 当次button控件被点击
调用使用此布局文件[xx.xml]的activity的funClick方法。
?
注意:在activity中写funClick方法时.需要传入一个参数Viewv
funClick(View v){}
这是必须得 否则会报错。
public void funClick(View v) { ??? int temp = v.getId(); ? ??? if (temp == R.id.bt1) { ?????? this.startActivity(new Intent(ShouYeActivity.this, ????????????? OpticalRulerActivity.class)); ??? } ??? if (temp == R.id.bt2) { ?????? this.startActivity(new Intent(ShouYeActivity.this, ????????????? AboutActivity.class)); ??? } ??? if (temp == R.id.bt3) { ?????? this.finish(); ??? } } 当多控件使用统一按钮监听方法时需用v.getId(); 获得被点击控件的id号 根据ID号分辨被点击的控件。 |
?
?
用XML文件来写菜单栏menu
一般人写菜单栏是直接在activity代码里面写。
如此每个activity都需要重复的写入onCreateOptionsMenu方法。
public boolean onCreateOptionsMenu(Menu menu) { ??????? ?menu.add(groupId, itemId, order, title); ?????? return super.onCreateOptionsMenu(menu); } |
这样的维护难度非常高。[当activity使用一样的menu,则需要每个修改]
?
那么如果使用xml来写的话 每次只需要修改xml文件 就可以做到使用此xml文件menu菜单同步被修改的效果。
代码如下
Menu的xml文件需要放在在res下menu文件夹(默认不存在需要自己创建) 其他名文件夹不行。其实你在RES下自己建立其他文件夹下放xml文件会被报下错。
Error in an XML file: aborting build.
?
Res/menu/menu.xml(文件名随意)
<menu xmlns:android="http://schemas.android.com/apk/res/android"> ??? <group android:id="@+id/group1">组id ?????? <item android:id="@+id/item1" android:orderInCategory="1" ?????????? android:title="版本信息"> 组内id,排序(注意排序是对整个menu来说的不考虑组问题),title ?????? </item> ?????? <item android:id="@+id/item2" android:orderInCategory="2" ?????????? android:title="作者的话"> ?????? </item> ??? </group> ??? <group android:id="@+id/group2">组id …………………………… ??? </group> ? </menu> ? |
?
?Activity代码处
??? // 菜单栏 ??? public boolean onCreateOptionsMenu(Menu menu) { ?????? // TODO Auto-generated method stub ?????? MenuInflater inflater = this.getMenuInflater(); 因为是用资源文件来填充menu,所以需要在系统中获取到menu填充器(MenuInflater) ?????? inflater.inflate(R.menu.menu, menu); 用填充器对象的填充方法(inflate),传入参数 填充资源,填充对象 ?????? return super.onCreateOptionsMenu(menu); 返回父类方法。 ??? } |
?
?
Toast提示用户
Android提醒用户的方法不少比如dialog系列的东西,但是如果想让用户知道,又不需要他点击来继续的话(因为多次点击会降低用户体验),使用Toast(这个单词的意思是土司面包)
在activity下可以使用
?
Toast.makeText(this,"要显示的内容",Toast.LENGTH_LONG).show();
完整代码
?
Toast.makeText(Context ct,Stringtitle,Toast.LENGTH_LONG| Toast.LENGTH_SHORT)
这一段是对Toast设置text,Toast是android 自带的 不需要实例化直接Toast就可以用了。
?
.show();
这个很重要,执行这个的时候才把Toast执行在屏幕上。
?
?
?
?
?
RES文件夹下的3个图片文件夹
从文件名就能看出来hdpi ,ldpi,mdpi 对应 高 低 中dpi 一般来说我们只需要把文件放到hdpi文件目录下 就可以了,当遇到需要使用ldpi mdpi文件时, Android会自动缩图(效果不好) ? 但是注意每个dpi文件夹下的icon.png需要自己重写。 否则就会在系统中看到很恶心的小绿人。 |
?
横竖屏,与全屏
?
横竖屏
在AndroidManifest.xml文件下的application 或者activity内写入下行代码实现横竖屏。
android:screenOrientation="landscape" 横屏,portrait竖屏 |
?
全屏
在AndroidManifest.xml文件下的application 或者activity内写入下行代码实现全屏。
android:theme="@android:style/Theme.NoTitleBar.Fullscreen" |
?
关于设置全屏的还有另外一种设置风格(写风格xml文件)然后让activity或application调用的。
懒得手打了直接复制我ITEYE博客内容了
http://poolo.iteye.com/admin/blogs/1207642
消除标题栏 第一种:在AndroidManifest.xml文件中定义 < application android:icon="@drawable/icon" android:label="@string/app_name" android:theme="@android:style/Theme.NoTitleBar"> 可以看出,这样写的话,整个应用都会去掉标题栏,如果只想去掉某一个Activity的标题栏的话,可以把这个属性加到activity标签里面 第二种:这种在一般的应用中不常用,就是在res/values目录下面新建一个style.xml的文件 [放在其他文件下目录下不行,只有放在values下系统才会把style读进去 [email protected]] 例如: ? < ?xml version="1.0" encoding="UTF-8" ?> < resources> < style name="notitle"> < item name="android:windowNoTitle">true< /item> < /style> < /resources>? 这样,我们就自定义了一个style,就相当于一个主题,然后在AndroidManifest.xml文件中定义 < application android:icon="@drawable/icon" android:label="@string/app_name" android:theme="@style/notitle"> 这样也可以达到去掉标题栏的效果 ? 全屏的方法 ? ? ? 第一种 最简单 最方便 但修改麻烦 android:theme="@android:style/Theme.NoTitleBar.Fullscreen" 第二种 稍微麻烦 但修改容易 只需要修改自己写的风格文件即可 自己写一个XML文件放在res/values文件夹下 xml文件内容 <?xml version="1.0" encoding="UTF-8" ?> <resources> <style name="fullscreem"> <item name="android:windowNoTitle">true</item> <item name="android:windowFullscreen">true</item> </style> </resources>? ? ?最后添加 android:theme="@style/fullscreem" ? |
?
关于系统出错
除了代码问题有时候考虑下是不是没有添加权限
在AndroidManifest.xml文件下的manifest下是否有添加权限
?<uses-sdk android:minSdkVersion="4"/>
?<uses-permission android:name="android.permission.CAMERA" />
?<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
?
LogCat的使用
Mars视频讲了 我就稍微提下
1.将logCat添加到界面中
?
?
得到
?
?
?2.LogCat的使用
在任意代码处可以写
Log.v("mytest", "Rid:" + Rid);
//String String 键值对
//第一个参数是Logcat TAG 也就是标签、识别符
//第二参数就是内容了
?
?当系统执行到这句的时候。就会在下面的
LogCat窗口显示。
但注意系统自带了N从里面找出你写的那个是个困难度非常大的事情。
所以点击需要把你自己写的筛选出来
点击
?
?显示如下(我写的那个例子的log tag就是mytest)
?
?
同logCat 标签下可能有不同级别的提示
则靠点击来选择问题严重性
?显示全部问题
只显示log.e的问题
反正是按钮拿个按钮就显示那个按钮加它右边的所有。
比如按?那么显示的就是。
?
Log不仅只有log.v
还有Log.d?? Log.i??Log.w?? Log.i
?
小技巧:在系统出错的时候点击
Log的log标签(系统自带无法删除)
?
然后点击就能看到当前系统报错了。
?
使用DDMS时经常会出现logCat不显示的问题,首先切到DDMS选择手机,如果还是没连接到得话[这时候你看DDMS那边手机的显示连接但看不到android版本号],解决办法是手机重新连接电脑。
?
先写这么多吧,以后想到再写,以上大多数是我自己的经验,可能有些不符合别人习惯但是我觉得挺好的。个人按照自己需求选择性学习。有更好的办法请使用更好的办法在写这篇文章的时候我还没想到更好的解决办法。
?
2011-10-23
poolo
?