基础知识

android

2013-04-26 16:58


组件参数ID  android:id="@+id/ID名称"


TextView 变量 =(TextView)findViewById(R.id.名字);


字符串资源  数值资源 颜色 字符串数字 数值数组 图片 文字大小 样式  主题 等。。

res-values-strings.xml    值文件  android:text="@string/名字"


获取资源文件   getResoucrse.getColor(R.color.id)  等方法。。。。


弹窗 Toast.makeText(getBaseContext(), "哈哈哈哈哈", 4).show();


                TextView t1= (TextView)findViewById(R.id.t1);   //获取t1
                TextView tt2=(TextView)findViewById(R.id.textView1);  //获取tt2

                EditView ed=(EditView)findViewById(R.id.EditView);  //获取tt2
                t1.setTextSize(BIND_IMPORTANT, 20);  //设置文字大小
                tt2.setBackgroundColor(Color.RED);    //设置背景颜色
                tt2.setText(t1.getText().toString());  //获取文字 并设置文字
                ed.setText(tt2.getText().toString());


TextView 文字显示组件

EditView  编辑框

Button   按钮

ImageButton   图片按钮

ToggleButton   按钮 OFF ON 开关

CheckBox      复选框+


TextView 限制输入内容 +android:inputType

CheckBox     默认选中 android:checked="true"



绑定事件的4种方法

创建类

bt.setOnClickListener(new ck());

public class ck implements OnClickListener{

            @Override
            public void onClick(View v) {
                ///////////
           }
  };


匿名内部类
bt.setOnClickListener(new OnClickListener()
                        {
                                @Override
                                public void onClick(View arg0)
                                {
                                }
                        });

布局里  android:onClick="add"    就会执行add方法。

void onClick(View v) {  }

 当前类继承接口

public class MainActivity extends Activity implements OnClickListener


@Override
    public void onClick(View v) {
   
        
    }

bt.setOnClickListener(this)


AndroidManifest.xml

 package="com.example.app"   包名
    android:versionCode="1"      版本号
    android:versionName="1.0"   版本名称

android:installLocation            

   安装位置       aotu 默认自动寻找    internalOnly 值能ROM   preferExternal直接安装SD卡


 <activity
            android:name="com.example.app.MainActivity"          程序的主入口
            android:label="@string/app_name" >


关于意图


首先要去注册意图

AndroidManifest.xml 文件注册意图

  <activity android:name=".M2"></activity>

需要新先建立class文件


意图传单

Intent in2 = new Intent(MainActivity.this, M3.class);
                in2.putExtra("A", "AAA");
                startActivity(in2);    


接收 

    Intent i=getIntent();
                String s=i.getStringExtra("A");
                t3.setText(s);


错误提示:

Failed to install xxx.apk on device 'emulator-5554': timeout

或者

the user data image is used

 

原因:

由于模拟器已经开启而没有关闭或者非法关闭引起的。

解决方法:

删除 C:\Documents and Settings\Administrator\.android\avd\对应版本.avd
下所有以.lock结尾的文件夹。

 

 


或者

Failed to install *.apk on device *:

timeout Launch canceled!

 还有一种办法:

在window->preferences->Android->DDMS->ADB connection time out (ms): 


将这个值设置的大一些,默认为5000,我设置成500000,然后就OK了。



1.创建一个证书
C:/jdk1.5.0_04/bin>keytool -genkey -alias xahCA -keyalg RSA -keystore dyfCALib


查看证书

 keytool -list -v -keystore keystorefile -storepass 123456

其中keytool为jdk自带工具;keystorefile为Android 签名证书文件


setTitle("ColaBox-添加账单");   
修改页面标题


压力测试   adb shell 

monkey 5000  随即点击5000次。。。。  冒烟测试



将需要安装的apk文件复制到platform-tools目录下

  在cmd窗口中的platform-tools目录下输入adb install game.apk,回车,稍等,完成apk在模拟器上的安装。


LayoutInflater和inflate()方法的用法

LayoutInflater作用是将layoutxml布局文件实例化为View类对象。

1).通过SystemService获得

  LayoutInflater inflater = (LayoutInflater)context.getSystemServices(Context.LAYOUT_INFLATER_SERVICES);

   View view = inflater.inflate(R.layout.main, null);

2).从给定的context中获得

    LayoutInflater inflater = LayoutInflater.from(context);

    View view = inflater.inflate(R.layout.mian, null);

(3).   LayoutInflaterinflater =getLayoutInflater();(在Activity中可以使用,实际上是View子类下window的一个函数)

   Viewlayout = inflater.inflate(R.layout.main,null);

,这三种方式本质是相同的,从源码中可以看出:


CheckedTextView 组件其实就是一个 但文字提示的多选按钮。。

前提是 有android:checkMark="?android:attr/listChoiceIndicatorMultiple" 这个样式

有点击事件setOnClickListener

有反转状态事件 toggle();

置checkedTextView1为选中状态    .setChecked(true);  //默认是false

--------------------------------------------------------------------------------------------

载入布局。

 <include  android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        layout="@layout/laa" />

 <include   android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        layout="@layout/lbb" />

--------------------------------------------------

Switch 控件  就是按钮的切换状态

FrameLayout 布局 后面的在上面 层叠    android:layout_gravity="bottom|center"




显示

btn.setVisibility(View.VISIBLE);

隐藏

btn.setVisibility(View.INVISIBLE);


int -> String

第一种方法:s=i+""; 
第二种方法:s=String.valueOf(i);

String -> int

第一种方法:i=Integer.parseInt(s);
第二种方法:i=Integer.valueOf(s).intValue();



requestWindowFeature(Window.FEATURE_NO_TITLE);


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:标题栏右侧的图标





获取当前应用的版本号:

   private String getVersionName() throws Exception
   {
           // 获取packagemanager的实例
           PackageManager packageManager = getPackageManager();
           // getPackageName()是你当前类的包名,0代表是获取版本信息
           PackageInfo packInfo = packageManager.getPackageInfo(getPackageName(),0);
           String version = packInfo.versionName;
           return version;
   }

获取当前系统的版本号:

        textView.setText("Product Model: " + android.os.Build.MODEL + "," 
+ android.os.Build.VERSION.SDK + ","
+ android.os.Build.VERSION.RELEASE);



TABhost


<?xml version="1.0" encoding="utf-8"?>

<TabHost xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"

    android:layout_height="match_parent"     android:id="@+id/tabhost"    >

      <LinearLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent">  

            <!-- TabWidget的id属性必须为 @android:id/tabs-->              

            <TabWidget android:id="@android:id/tabs" android:orientation="horizontal" android:layout_width="fill_parent"   android:layout_height="wrap_content" />  

            <!-- FrameLayout的id属性必须为 @android:id/tabcontent-->  

   <FrameLayout android:id="@android:id/tabcontent" android:layout_width="fill_parent" android:layout_height="fill_parent">  

   <LinearLayout android:id="@+id/view1" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#FF0000">  

  <TextView  android:layout_width="match_parent"  android:layout_height="wrap_content"  android:text="这是1"    />

   </LinearLayout>

              

   <LinearLayout android:id="@+id/view2" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#00ff00" >  

  <TextView  android:layout_width="wrap_content"  android:layout_height="wrap_content"  android:text="这是2"   />

   </LinearLayout>

    

    <LinearLayout android:id="@+id/view3" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#0000FF">  

  <TextView  android:layout_width="wrap_content"  android:layout_height="wrap_content"  android:text="这是3"    />  

    </LinearLayout>

       

    </FrameLayout>  

  </LinearLayout>  

</TabHost>



         // 获取TabHost对象  

        TabHost tabHost = (TabHost)findViewById(R.id.tabhost);  

        // 如果没有继承TabActivity时,通过该种方法加载启动tabHost  

        tabHost.setup();  

 tabHost.addTab(tabHost.newTabSpec("tab1").setIndicator("第一个标签",getResources().getDrawable(R.drawable.ic_launcher)).setContent(R.id.view1));  

 tabHost.addTab(tabHost.newTabSpec("tab3").setIndicator("第三个标签").setContent(R.id.view3));  

 tabHost.addTab(tabHost.newTabSpec("tab2").setIndicator("第二个标签").setContent(R.id.view2)); 


 TabSpec tp = tabHost.newTabSpec("tab4").setIndicator("第4个标签").setContent(R.id.view2); 

 tabHost.addTab(tp);



------------------------------------------------------

include  重用布局

<include  android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        layout="@layout/laa" />

 <include   android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        layout="@layout/lbb" />

laa  和lbb 是正常布局文件

merge 标签是继承父分类的布局样式。
<merge xmlns:android="http://schemas.android.com/apk/res/android">
     <Button
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/add"/>
    <Button
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/delete"/>
</merge>


-------------------------------------------------




最近在做android项目的时候遇到一个问题,应用程序初始化时需要批量的向sqlite中插入大量数,导致应用启动过慢。


android使用的是sqlite数据库,sqlite是比较轻量级的数据库,在Google了之后发现,sqlite事务处理的问题,在sqlite插入数据的时候默认一条语句就是一个事务,有多少条数据就有多少次磁盘操作。我的应用初始5000条记录也就是要5000次读写磁盘操作。


解决方法:


添加事务处理,把5000条插入作为一个事务


dataBase.beginTransaction();        //手动设置开始事务


//数据插入操作循环


dataBase.setTransactionSuccessful();        //设置事务处理成功,不设置会自动回滚不提交


dataBase.endTransaction();        //处理完成 





应用中的清理数据,会清理掉除去lib文件夹(含内部文件)的文件及文件夹。
/sdcard/Android/data/这个目录也是和包名相关的,但是系统中的清理数据不会清理掉这个目录中的相关信息。



实现两个 Activity 切换时的动画

有两个参数:进入动画和出去的动画。

注意
1、必须在 StartActivity()  或 finish() 之后立即调用。
2、而且在 2.1 以上版本有效
3、手机设置-显示-动画,要开启状态

overridePendingTransition(R.anim.fade, R.anim.hold);





样式和主题


样式