您的位置:首页 > 移动开发 > Android开发

关于Android焦点的个人理解,希望大家来指正。

2014-06-30 23:45 465 查看
看了一些关于Android焦点的问题,关于焦点,最直观的就是在打开一个页面,有好几个EditText的时候,如果谁获得了焦点,当前输入的游标就会停在那儿;那其他的控件呢?比如Button之类的获得焦点在开发的时候,可能想我这样的菜鸟不容易发现。

这个地方有两个关于设置焦点获取的A:View.setFocusable()和B:View.setFocusableInTouchMode();简单介绍下,其中A呢是指在键盘模式下,一般在那些带有键盘的手机上,因为有物理按键之类的,可以通过上下左右的按钮来进行切换焦点,B呢是指在TouchMode下的焦点获取,现在一般的智能手机好像都是Touch的吧,那我就重点说这个。

口说无凭,上例子!

简单测试例子,简陋不是重点。

<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=".MainActivity" >

<TextView
android:id="@+id/tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world" />

<Button
android:id="@+id/btn1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/textView1"
android:layout_below="@+id/textView1"
android:layout_marginTop="92dp"
android:text="btn1" />

<Button
android:id="@+id/btn0"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/btn1"
android:layout_below="@+id/textView1"
android:layout_marginTop="24dp"
android:text="btn0" />

</RelativeLayout>


MainActivity.java:

package com.example.focustest;

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnFocusChangeListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity {
Button btn0;
Button btn1;
TextView tv;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setTitle("Main Menu-Select One Item#");
tv = (TextView) findViewById(R.id.tv);
tv.setFocusableInTouchMode(true);
tv.setOnFocusChangeListener(focusListener);
tv.requestFocus();

btn0 = (Button) findViewById(R.id.btn0);
btn0.setOnFocusChangeListener(focusListener);
//		btn0.setFocusable(true);
btn0.setFocusableInTouchMode(true);
// btn0.requestFocus();

btn1 = (Button) findViewById(R.id.btn1);
//		btn1.setFocusable(true);
btn1.setOnFocusChangeListener(focusListener);
btn1.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
btn0.requestFocus();
Toast.makeText(getBaseContext(), "click btn1",
Toast.LENGTH_SHORT).show();
}
});
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}

OnFocusChangeListener focusListener = new OnFocusChangeListener() {

@Override
public void onFocusChange(View v, boolean hasFocus) {
// TODO Auto-generated method stub
if (hasFocus) {
switch (v.getId()) {
case R.id.tv:
tv.setText("focuse on tv");
tv.setBackgroundColor(Color.RED);
break;
case R.id.btn0:
tv.setText("focus on btn0");
btn0.setBackgroundColor(Color.RED);
break;

case R.id.btn1:
tv.setText("btn1");
break;
}
}
}
};

}
测试结果:
1.在程序刚开始的时候tv是首先requestFocus的所以tv背景是红的;



2.点击btn1或者点击btn0都会使焦点在btn0上,因为btn1并没有设置setFocusableInTouchMode(),所以在Touch模式下是不能获取焦点的,

添加的focusListener无法截取焦点改变的事件。



这个例子就到这了,你懂了吗?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息