Android 心得

1. 更改模拟器横竖屏切换

    (1)启动AVD

    (2)按Ctrl+F11键实现横竖屏切换

2. 自定义View中对外开放控件的监听事件

    (1)自定义View中

        public void OnBtnSetClickListener(OnClickListener listener)

        {

            btn.setOnClickListener(listener);

            txt.setOnClickListener(listener);

        }

    (2)使用View的Activity中

        view.OnBtnSetClickListener(new OnClickListener() {

            public void onClick(View v) {}

        });

3. 属性设置代码先后顺序对控件的影响

例:

    btn.getBackground().setAlpha(127);

    btn.setBackgroundResource(R.drawable.bj);

    此时透明度无效果,必须先设置背景图,再设置背景图的透明度。

4. 延迟一段时间执行某个操作

     (1)使用Timer

        timer.schedule(timerTask, 5000);

        private TimerTask timerTask = new TimerTask() {

             @Override
             public void run() {

                //非UI线程,不能直接操作控件
                 handler.sendEmptyMessage(0);

             }

        };

    (2)使用Handler

    class myClass implements Runnable (

        public void run() {

                // handler.postDelayed(this, 5000); 添加这句话会重复执行下面的语句

                //UI线程,可以直接操作控件

                view.setVisibility(View.GONE);

        }

        public void oper() {

             handler.postDelayed(this, 5000);

        }

    }

5. ScrollView和HorizonalScrollView的使用

    (1)垂直、水平滚动条

    (2)只能在其内部使用单一的布局文件,如LinearLayout

    (3)二者可相互嵌套

    (4)不能将二者嵌套在TableLayout中,否则滚动条不好使,可以放在其他Layout中

6 . padding和layout_margin区别
     (1) padding属性用于设置组件内容距离组件边缘的距离。
     (2) layout_margin属性用于设置组件间的间隔距离,或距离父组件边缘的距离。 

 7. gravity和layout_gravity区别
     (1) gravity属性用于设置组件内容(包括容器组件的子组件)相对组件的位置。如设置TextView组件中的文本水平居中和垂直居中。
     (2) layout_gravity属性用于设置当前组件相对于父组件的位置。

8. TextView或EditText显示图片
     (1) 使用<img>标签,再使用Html.fromHtml方法将含<img>标签的文本转换成CharSequence对象。fromHtml方法的第二个参数,需要ImageGetter对象,通过ImageGetter.getDrawable方法可以返回一个封装要显示的图像的Drawable对象。
     (2) 通过ImageSpan对象封装Bitmap对象,并使用SpannableString对象的setSpan方法将某一部分文本替换成ImageSpan对象,最后使用setText或append方法设置SpannableString对象。

        TextView txt = (TextView) findViewById(R.id.imgTxt);
        
        BackgroundColorSpan bgSpan =  new BackgroundColorSpan(Color.YELLOW);//用来设置背景色
        ImageSpan imgSpan = new ImageSpan(this, R.drawable.bottom_home);
        SpannableString spannableStr = new SpannableString("homepng");
        spannableStr.setSpan((Object)imgSpan, 4, spannableStr.length(), 0);
        txt.setText(spannableStr); 


9. TextView组件本身可以显示URL、Email等特殊信息,这些信息都会以链接形式显示,在单击链接时会执行相应的动作,如果想在单击链接后弹出自定义的Activity。
        String str = "homepng";
        SpannableString spannableStr = new SpannableString(str);
        spannableStr.setSpan(new ClickableSpan() {
   
               @Override
           public void onClick(View widget) {

            Intent intent = new Intent(AndroidTest.this, UrlActivity.class);
            startActivity(intent);
       }    
  }, 0, str.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        txt.setText(spannableStr);
        // 单击链接时凡是有要执行的动作,都必须设置MovementMethod对象
        txt.setMovementMethod(LinkMovementMethod.getInstance()); 

10. 在EditText中显示提示文本,在提示文本后面可以输入文本。
      可以使用自定义EditText类,并覆盖onDraw方法,在该方法绘制提示文本。
      然后使用paddingLeft属性根据提示文本的宽度设置开始输入文本的位置。
      protected void onDraw(Canvas canvas) {
          super.onDraw(canvas);
          Paint paint = new Paint();
          paint.setTextSize(18);
          paint.setColor(Color.GRAY);
          canvas.drawText("提示文本:", 2, getHeight() / 2 + 5, paint);
     }

    <com.tescomm.outman.MyEditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:paddingLeft="100dp"
        android:text="@string/hello"/> 

11. onClick事件的实现方式
    (1) 实现OnClickListener接口的onClick方法
    button.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View arg0) {
            Toast.makeText(this, "btn click", Toast.LENGTH_LONG).show();
        }
    }); 

    (2) 在布局文件中设置onClick属性
    <Button 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="click"
        android:onClick="btnClick"/>
    
    // 注意方法参数必须是View对象
    public void btnClick(View view) {
         Toast.makeText(this, "btn click", Toast.LENGTH_LONG).show();
    } 

12 . 布局文件嵌套(使用include标签)
task_bottom_btn.xml
<?xml...>
<RelativeLayout>
</RelativeLayout>

task_call.xml
<RelativeLayout>
    <TableLayout></TableLayout>
    <include layout=""/>
</RelativeLayout>

13. Java中十六进制数问题
(1) 如果在类中定义成员变量、静态变量、常量,赋值成十六进制,则运算时仍是十六进制。如
private static int hexVal = 0x7000;
private int hexVal2 = 0x7000;
private final int hexVal3 = 0x7000;

(2)运算过程中,Java会将十六进制数转换成十进制,如方法中定义的局部变量。
int hexNum = 0x7000;
if (num == hexNum)  // 此时会将hexNum十六进制转换成十进制数

14. 自定义View的onMeasure()方法
 (1) View调用此方法来确定本身和包含内容的大小。此方法被measure(int, int)唤起,而且必须被子类重写以得到包含内容确切大小。
 (2) 注意,当重写此方法时,必须调用setMeasureDimension(int, int)来保存View的大小,否则发生IllegalStateException。
 (3) 例,在为自定义View添加ScrollView时必须重写此方法
        onMeasure(int width, int height) {
            super.onMeasure(width, height);
            int sizeH = (taskList.size() + 1) * 32;
            setMeasuredDimension(width, sizeH);
        } 

15 . Layout中添加控件的方法
(1) 使用addView(View)方法
此方法对Layout对象只能使用一次,第二次调用前,要先使用remove方法,移除Layout中的控件。
(2) 使用addView(View, LayoutParams)方法
如果控件的布局不同,则要为每个控件单独创建LayoutParams对象。例
RelativeLayout.LayoutParams param = new RelativeLayout.LayoutParams(...);
param.addRule(...);
relativeLayout.addView(btn1, param);

param = new RelativeLayout.LayoutParams(...);
param.addRule(...);
relativeLayout.addView(btn2, param);
 
16. 获取文本宽度 例如:paint.measureText("Android"); 
17. 画图时去掉锯齿的方法
(1) paint.setAntiAlias(true);
(2) canvas.setDrawFilter(new PaintFlagsDrawFilter(0, Paint.ANTI_ALIAS_FLAG | Paint.FILTER_BITMAP_FLAG));

18. 加载图片,图片变形的问题
(1) 使用自定义View或xml加载图片时,没有设置图片的缩放比例,但显示的图片有缩放。
(2) 检查图片是按哪种格式制作的,是hdpi,ldpi,mdpi,再看图片是否正确的放在drawable的文件夹下。

19. 关于HTC手机有快速启动功能,监听关机广播的问题。
 快速启动功能,关机时只是待机,并没有完全关闭手机,所以和待机(按下power键)触发的广播一致。
 <receiver android:name=".ScreenUnlockReceiver">
    <intent_filter>
        <action android:name="android.intent.action.USER_PRESENT"/>
    </intent_filter>
 </receiver>

你可能感兴趣的:(Android 心得)