android 基础知识(一)

来源:互联网 发布:java字符串格式化输出 编辑:程序博客网 时间:2024/06/01 11:12


android:layout_above="@id/xxx"  --将控件置于给定ID控件之上
android:layout_below="@id/xxx"  --将控件置于给定ID控件之下

android:layout_toLeftOf="@id/xxx"  --将控件的右边缘和给定ID控件的左边缘对齐
android:layout_toRightOf="@id/xxx"  --将控件的左边缘和给定ID控件的右边缘对齐

android:layout_alignLeft="@id/xxx"  --将控件的左边缘和给定ID控件的左边缘对齐
android:layout_alignTop="@id/xxx"  --将控件的上边缘和给定ID控件的上边缘对齐
android:layout_alignRight="@id/xxx"  --将控件的右边缘和给定ID控件的右边缘对齐
android:layout_alignBottom="@id/xxx"  --将控件的底边缘和给定ID控件的底边缘对齐
android:layout_alignParentLeft="true"  --将控件的左边缘和父控件的左边缘对齐
android:layout_alignParentTop="true"  --将控件的上边缘和父控件的上边缘对齐
android:layout_alignParentRight="true"  --将控件的右边缘和父控件的右边缘对齐
android:layout_alignParentBottom="true" --将控件的底边缘和父控件的底边缘对齐
android:layout_centerInParent="true"  --将控件置于父控件的中心位置
android:layout_centerHorizontal="true"  --将控件置于水平方向的中心位置
android:layout_centerVertical="true"  --将控件置于垂直方向的中心位置


android:layout_marginLef是设置整个布局离左边的距离是52像素,
android:paddingLeft是设置布局里面的内容距离布局左边是52像素

onclick 事件用2种方法来实现:
1.在xml中设置button属性OnClick为mybtnOnclick,然后在.java文档中实现他的方法:
public void mybtnOnclick(View v){ //参数v表示被点击的那个对象
        System.out.println("mybtn is clicked");
    }
2.在java文件中用代码来实现:
第一步  import android.view.View.OnClickListener;
        import android.widget.Button;

第二部  在activity中定义一个  private Button m_mybtn = null;

第三部  在oncreat函数中m_mybtn = (Button)findViewById(R.id.mybtn2);//取得button对象
        m_mybtn.setOnClickListener((OnClickListener) mybtnOnClickListener);//并且为他设定onclick监听器

第四步  实现监听器的处理方法
    private MybtnOnClickListener mybtnOnClickListener = new MybtnOnClickListener();
        class MybtnOnClickListener implements OnClickListener{
        @Override
        public void onClick(View v){
            System.out.println("Method------------->mybtn2 is clicked");
           }
        }

3.listview 问题
1.添加滚动条   android:fastScrollEnabled="true"
2.让滚动条一直显示而不是一闪而过 android:fadeScrollbars="false"
3.显示你列表的最下面   android:stackFromBottom="true"  

 list.setOnItemClickListener(new OnItemClickListener()
            {public void onItemClick(AdapterView<?> adapterView, View item, int position, long time)
            {   item.setBackgroundColor(234  );   }
            });


  <item android:state_focused="false" android:state_pressed="true"   android:drawable="@drawable/pic3" />    
<!--选中时的图片背景-->    
  <item android:state_selected="true"   android:drawable="@drawable/pic4" />     
<!--获得焦点时的图片背景-->    
  <item android:state_focused="true"   android:drawable="@drawable/pic5" />     
   


5.android listview 如何设置其选中的颜色
新建drawable/item_bk.xml
Xml代码
<selector xmlns:android="http://schemas.android.com/apk/res/android">  
        <item android:state_window_focused="false"  
              android:drawable="@color/trans" />  
      <item android:state_focused="true" android:drawable="@color/trans"></item>  
       <item android:state_pressed="true" android:drawable="@color/trans"></item>  
</selector>  

然后在listview里面加入:
Xml代码
android:listSelector="@drawable/item_bk"


6.改变textview 的字体的大小:
可以在XML里面加一句话
    android:textSize=""
或者
  在
  mTextView.setTextSize(size);


7.返回home主页面的代码实现:
在service里监听 ACTION_MEDIA_MOUNTED  ACTION_MEDIA_UNMOUNTED   ACTION_MEDIA_SHARED  ACTION_MEDIA_EJECT并执行以下代码

Intent home = new Intent(Intent.ACTION_MAIN);  
    home.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);  
    home.addCategory(Intent.CATEGORY_HOME);  
    startActivity(home);


8.在两个activity之间传值
ActivityA:

    Intent intent=new Intent();
    intent.setClass(ActivityA.this,ActivityB.class);
    intent.putExtra("extra", "Welcome to ...");
    startActivity(intent);

ActivityB:

  Intent intent=getIntent();
  String stringValue=intent.getStringExtra("extra");

9.补充知识:

【0】TouchMode : 对于触屏设备,当用户点击到屏幕的时候,设备会进入Touch Mode。如果某个组件的isFocusableInTouchMode()为true,那么当点击到这个组件的时候会触发组件进行focus。例如,EditText View,我们点击输入框的时候,会引发EditText进行focus,这个时候,可以看到光标在输入框进行跳动。那么其他组件如果没有设置isFocusableInTouchMode()为ture的话,就是touchable的,当点击的时候不会触发focus,只会触发onClick的Listener。

10.使用菜单主要通过重载 Activity 中的两个函数来实现:
public boolean onCreateOptionsMenu(Menu menu)
public boolean onOptionsItemSelected(MenuItem item)

11.实现方法是继承 onCreateDialog()函数,返回一个 Dialog 类型:
@Override
protected Dialog onCreateDialog(int id) {
}
onCreateDialog()函数的参数 id 是区分对话框的标示,当调用对话框的时候需要调用 showDialog()。
public final void showDialog (int id)
showDialog()函数也是通过 id 来区分对话框。通过 showDialog()和 onCreateDialog()函数可以统一活动中的对话
框。

12.android:visible属性的说明:

VISIBLE:设置控件可见

INVISIBLE:设置控件不可见

GONE:设置控件隐藏

 

而INVISIBLE和GONE的主要区别是:当控件visibility属性为INVISIBLE时,界面保留了view控件所占有的空间;而控件属性为GONE时,界面则不保留view控件所占有的空间。


13.message里有一个target的,也就是目标handler。
如果new一个message,你必须使用handler.sendmessage(msg)才可以把message发到相应的handler。
但obtain会自动为你把message的target设置为当前的handler,所以直接sendtotarget就行了。
另外handler内有个池,所有用完的message并没有回收,而是放到这个池里。
使用obtain会从池里拿一个出来用,这样就避免的复制申请释放内存,性能要好很多。
我现在一般都用obtain,很方便。一行代码就写完了。
类似handler.obtainmessage(1,0,0,obj).snedtotarget();

14.Onscroll的含义:
public abstract boolean onScroll (MotionEvent e1, MotionEvent e2, float distanceX, float distanceY)
Since: API Level 1

Notified when a scroll occurs with the initial on down MotionEvent and the current move MotionEvent. The distance in x and y is also supplied for convenience.
Parameters
e1     The first down motion event that started the scrolling.
e2     The move motion event that triggered the current onScroll.
distanceX     The distance along the X axis that has been scrolled since the last call to onScroll. This is NOT the distance between e1 and e2.
distanceY     The distance along the Y axis that has been scrolled since the last call to onScroll. This is NOT the distance between e1 and e2.
Returns

    true if the event is consumed, else false

e1 初次触控地图的event1
e2 每次触发onScroll函数得到的的event2
distance是上一次的event2 减去 当前event2得到的结果 //注意到顺序
lastEvent2 - event2 = distance

14.对NDK进行了粗略的研究后,我对“NDK是什么”的理解如下:
1、NDK是一系列工具的集合。
NDK提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将so和java应用一起打包成apk。这些工具对开发者的帮助是巨大的。NDK集成了交叉编译器,并提供了相应的mk文件隔离CPU、平台、ABI等差异,开发人员只需要简单修改mk文件(指出“哪些文件需要编译”、“编译特性要求”等),就可以创建出so。NDK可以自动地将so和Java应用一起打包,极大地减轻了开发人员的打包工作。
2、NDK提供了一份稳定、功能有限的API头文件声明。
Google明确声明该API是稳定的,在后续所有版本中都稳定支持当前发布的API。从该版本的NDK中看出,这些API支持的功能非常有限,包含有:C标准库(libc)、标准数学库(libm)、压缩库(libz)、Log库(liblog)。

15. android中常用的四个布局是framlayout,linenarlayout,relativelayout和tablelayout。
    android 的四大组件是activiey,service,broadcast和contentprovide。

16.android 中service的实现方法是:startservice和bindservice。
   android的数据存储的方式sharedpreference,文件,SQlite,contentprovider,网络。

17.目的: A.java 是主界面,B.java 是子功能模块,要从A启动B,B干完活之后把结果汇报给A.
 先看 A.java 的相关代码
//-- A.java --//
//启动B
Intent bintent = new Intent(A.this, B.class);
//设置 bintent的Bundle的一个值
String bsay = "Hello, this is B speaking";
bintent.putExtra("listenB", bsay)
startActivityForResult(bintent,0); // 参数(Intent intent, Int requestCode) 的 requestCode 对应下面回收Bundle时识别用的

 //重写onActivityResult()来处理返回的数据,建议先看B.java 的代码再回来看这里比较好理解
//这理有三个参数 requestCode, resultCode, data
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (resultCode) { //resultCode为回传的标记,我在B中回传的是RESULT_OK
case RESULT_OK:
Bundle b=data.getExtras();  //data为B中回传的Intent
String str=b.getString("ListenB");//str即为回传的值"Hello, this is B speaking"
                      break;
default:
           break;
}
}

 //-- B.java --//
// 用 setResut() 准备好要回传的数据后,只要使用finish()的方法就能把打包好的数据发给A且运行onActivityResult()部分的代码

Intent aintent = new Intent(B.this, A.class);
setResut(RESULT_OK,aintent); //这理有2个参数(int resultCode, Intent intent)
... ...
finish();

-------------------------------------------------------------------------------------
OK,代码如上,可能这个时候还会有点疑问,关于参数的疑问。直接看android sdk 帮助说得更清楚。我发现网上有些文章还有吧 requestCode 和 resultCode 混淆说明错的。
startActivityForResult(Intent intent, Int requestCode)
intent 传给B的,不解释,看不懂你还是玩玩手机算了,别想开发的事情了
requestCode >=0就好,随便用于在onActivityResult()区别哪个子模块回传的数据,如果还有C.java ,D甚至E子模块的话,每个区分开不同的requestCode就好。

setResut(int resultCode, Intent intent)
resultCode 如果B子模块可能有几种不同的结果返回,可以用这个参数予以识别区分。这里还有个特殊的 RESULT_OK 值,没有特殊情况用它就好了,sdk有说明的,呵。
intent 继续不解释,传回给A的onActivityResult()

onActivityResult(int requestCode, int resultCode, Intent intent)
这里三个都不用解释了,与上文对应的东西。如果不对requestCode和resultCode 加以识别区分的话,只要有其他activity setResult到了A  onActivityResult()会无差别处理。

18.把字符数组转换成字符串:
private char[]ch={'a','b','c'};
String a = String.valueOf(ex.ch);

19.一个Intent Filters则用于描述一个Activity能够操作哪些Intent。一个Activity如果要显示一个人的联系方式时,需要声明一个Intent Filters,这个Intent  Filters要知道怎样去处理VIEW动作和表示一个人的URI.Intent  Filters一般在AndroidManifest.xml中定义。

20.
public class Activity extends ApplicationContext {
     protected void onCreate(Bundle icicle);
     protected void onStart();
     protected void onRestart();
     protected void onResume();
     protected void onFreeze(Bundle outIcicle);
     protected void onPause();
     protected void onStop();
     protected void onDestroy();
 }

21. 如何将一个Activity设置成窗口的样式。      在AndroidManifest.xml 中定义Activity的地方一句话android:theme="@android:style/Theme.Dialog"或android:theme="@android:style/Theme.Translucent"就变成半透明的