关于Android焦点的个人理解,希望大家来指正。
2014-06-30 23:45
465 查看
看了一些关于Android焦点的问题,关于焦点,最直观的就是在打开一个页面,有好几个EditText的时候,如果谁获得了焦点,当前输入的游标就会停在那儿;那其他的控件呢?比如Button之类的获得焦点在开发的时候,可能想我这样的菜鸟不容易发现。
这个地方有两个关于设置焦点获取的A:View.setFocusable()和B:View.setFocusableInTouchMode();简单介绍下,其中A呢是指在键盘模式下,一般在那些带有键盘的手机上,因为有物理按键之类的,可以通过上下左右的按钮来进行切换焦点,B呢是指在TouchMode下的焦点获取,现在一般的智能手机好像都是Touch的吧,那我就重点说这个。
口说无凭,上例子!
简单测试例子,简陋不是重点。
MainActivity.java:
1.在程序刚开始的时候tv是首先requestFocus的所以tv背景是红的;
2.点击btn1或者点击btn0都会使焦点在btn0上,因为btn1并没有设置setFocusableInTouchMode(),所以在Touch模式下是不能获取焦点的,
添加的focusListener无法截取焦点改变的事件。
这个例子就到这了,你懂了吗?
这个地方有两个关于设置焦点获取的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无法截取焦点改变的事件。
这个例子就到这了,你懂了吗?
相关文章推荐
- 今天做应用 用到了不少关于时间处理方面的东西,总结一下,希望大家指正!
- 关于android学习的个人理解
- 关于 *Object 的一点理解,肯定不全对 希望和大家交流
- 关于C语言静态链接的个人理解,欢迎指正
- 关于SOA的理解,请大家指正
- Z-Stack的运行角度的理解(仅作个人学习笔记,希望别人评指正)
- Android关于looper的几个方法的个人理解
- 关于android service的个人理解
- 关于Android中View滑动知识的一点个人理解
- 关于微软的OBA架构理解(欢迎大家批评指正^_^)
- Android关于沉浸式的个人理解
- 面向对象的优缺点(关于缺点部分,希望大家补充,个人实力实在不够,无法提出更深层次的缺点)
- 关于C语言静态链接的个人理解,欢迎指正
- 关于android的设计模式---MVP的个人理解
- 个人对于微信公众平台开发的一些整理,后续会有补充,欢迎大家给予指正。一、关于如何获取微信公众原始号
- 希望大家能推荐几本关于android和WM开发的书
- 个人简历,希望能得到大家的指点
- [求助]关于服务器之间的文件拷贝问题,没有头绪,希望大家指点一二
- 关于MTS和COM+的区别.(个人理解dotnet是windows DNA和com+的延续,那么MTS应该逐渐退出舞台了)
- 关于KMP算法的一点个人理解