`
java-admin
  • 浏览: 1364809 次
  • 性别: Icon_minigender_1
  • 来自: 陕西.西安
社区版块
存档分类
最新评论

Android中View如何切换Focus

阅读更多

视图(View)类代表了一种基本的用户界面组成模块。一个视图占据了屏幕上的一个矩形区域,并响应绘制图形和事件处理。视图类是窗体类(Widget)的基类,而窗体类用来生成可交互的用户图形接口(interactive GUI)。

视图类的使用窗口中所有的视图构成一个树形结构。要想增加视图,既可以用直接添加代码的方法,也可以在一个或者多个XML文件中声明新视图构成的树。在视图类的子类中,有的可以用来控制,有的具有显示文字、图片或者其他内容的功能。

当视图树被创建后,以下这若干种通用操作将可以被使用:
1.设置属性(properties):比如,可以设置TextView类的一个实例的文本内容。不同的子类可以用来设置的属性与方法不同。注意:只有编译时能够检测到的属性才可以在XML布局管理(layout)文件中设置。

2.设置输入焦点(focus):为了响应用户输入,整个框架将处理移动的焦点。如果想把焦点强制指向某一个特定的视图,必须调用requestFocus()方法。
3.设置监听器(listener):在视图中,允许设置监听器来捕获用户感兴趣的某些事件。比如说, 在所有的视图中,无论视图是获得焦点还是失去焦点,都可以通过设置监听器来捕获。可以通过调用setOnFocusChangeListener(View.OnFocusChangeListener) 来注册一个监听器。在其他视图子类中,提供了一些更加特殊的监听器。比如,一个按键(Button)可以触发按键被按下的事件。
4.设置是否可视(visibility):可以通过调用setVisibility(int)来显示或者隐藏视图。

下面我以ImageButton为例来说一下如何使用
setOnFocusChangeListener来实现focus的切换.

UI如图显示.当focus切换时, 在中间的TextView上显示每个ImageButton的内容.



代码如下:
public class MainMenu extends Activity {
    private ImageButton btnLogin, btnSet, btnAbout, btnHelp, btnVis;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.mainmenu);
        setTitle("Main Menu-Select One Item#");
       
        // Get the buttons, and set listeners.
        btnAbout = (ImageButton)findViewById(R.id.ibtnAbout);
        btnAbout.setOnClickListener(listener); 
        btnAbout.setOnFocusChangeListener(focusListener);

        //...

        //default focus in Login button.
        btnLogin.requestFocus(); //Can not work! Y??? Any one knows this?
     
        // Get the TextView to display text.
        tvName = (TextView)findViewById(R.id.tvMenu);
        tvName.setText("");      
    }

    OnClickListener listener = new OnClickListener(){
        public void onClick(View arg0){
            switch(arg0.getId()){
            case R.id.ibtnAbout:
                tvName.setText("About");
                Intent in = new Intent(MainMenu.this, about.class);
                startActivity(in);
                break;
            //...   
            }
        }
    };

    OnFocusChangeListener focusListener = new OnFocusChangeListener(){
        public void onFocusChange(View v, boolean hasFocus) {
            if (hasFocus){
                switch(v.getId()){
                case R.id.ibtnAbout:
                    tvName.setText("About");                   
                    break;
                //....   
                }
            }       
        }
    };
}

这里有一个问题,我还是不明白. 希望有哪位朋友告知. 当切换到此Activity的时候, 我希望默认的Focus是在Button Login上, 我调用
btnLogin.requestFocus();doestn't work! WHY?????

刚开始学Andorid, 知之甚少, 边学边练, 献丑了!
分享到:
评论

相关推荐

    Android重写Gallery

    // Ensure input focus on the current view mViews[mCurrentViewNumber].requestFocus(); // Run the slide animations for view transitions mAnimation.prepareAnimation(mCurrentViewNumber); this....

    CommonsWare.The.Busy.Coders.Guide.to.Android.Development.Version.8.2.2017

    Android, the next-generation open mobile platform from Google and the Open Handset Alliance, is poised to become a significant player in the mobile device market. The Android platform gives developers...

    Material Intro View是一个展示性的android库。-Android开发

    MaterialIntroView [测试版] Material Intro View是一个展示android库。 我们在Fabulous App上看到了这种展示,我们喜欢它。 然后决定创建像这样的展示柜。 屏幕用法新的M MaterialIntroView [测试版] Material ...

    Android代码-FancyShowCaseView

    Circle and Rounded Rectangle focus shapes Title style and position Custom view inflation Custom enter/exit animations Chaining multiple FancyShowCaseView instances Showing only one time Gradle ...

    The Busy Coders Guide to Android Development最终版2019

    Widget Catalog: StackView Widget Catalog: TabHost and TabWidget Widget Catalog: TimePicker Widget Catalog: ViewFlipper Device Catalog: Chrome and Chrome OS Device Catalog: BlackBerry Device Catalog: ...

    Android开发中requestfocus()无效的原因及解决办法

    前言 最近做公司项目的时候,经常会遇到一个问题,就是我为某个控件如EditText设置requestfocus()的时候不管用,比如说登陆的时候,我判断下用户输入的密码,如果正确就登陆,错误就提示密码...import android.view.View; i

    Android应用中clearFocus方法调用无效的问题解决

    EditText在focus与非focus的时候,显示效果是不同的:focus的时候光标是闪的,而且我们通常也会给它设置selector,focus的时候给它加上边框之类的. 通常当我们触摸EditText之外的View时,需要清除EditText的焦点.很自然的...

    android-viewflow

    View Flow for Android ViewFlow is an Android UI widget providing a horizontally scrollable ViewGroup with items populated from an Adapter. Scroll down to the bottom of the page for a screen shot. The...

    Android代码-android-design-template

    Material Design Android Template First of all, a few screenshots: Smartphone Tablet ...This is a State of the Art Android Material ...The focus of this project lies on the view layer and app navigat

    Android代码-ImageLoader

    基于subsampling-scale-image-view的大图预览功能,带进度和失败状态,能轮播,极致的高清无码,更重要的是非常省内存,绝不泄漏 丰富便捷的api: 暂停和继续图片加载,获取磁盘缓存大小和清空缓存,响应内存事件等等. 可以...

    Android自定义ViewGroup实现淘宝商品详情页

    最近公司在新版本上有一个需要,要在首页添加一个滑动效果,具体就是仿照X... 通过指定父view和子view的focus来切换滑动的处理界面—即通过view的requestDisallowInterceptTouchEvent方法来决定是哪一个ScrollView来处

    高仿微信界面

    现在三个Fragment已经添加到了MainActivity中,滑动ViewPager切换Fragment,同时底部的导航栏也会切换,在为ViewPager添加监听以前,先说说底部导航栏。 第二步,底部导航。 这个的切换其实就是切换准备好的png...

    Android代码-RxPM

    Reactive implementation of Presentation Model pattern in Android. RxPM allows to use the RxJava all the way from the view to the model. The main advantage of that is the ability to write UI logic ...

    自定义dialog

    import android.view.Gravity; import android.widget.ImageView; import android.widget.TextView; public class CentreProgressDialog extends Dialog { private Context context = null; private static ...

    FocusLayoutManager-有焦点item的水平/垂直滚动RecyclerView-LayoutManager。仿Android豆瓣书影音“推荐“频道列表布局.zip

     .focusOrientation(FocusLayoutManager.FOCUS_LEFT)  .isAutoSelect(true)  .maxLayerCount(3)  .setOnFocusChangeListener(new FocusLayoutManager.OnFocusChangeListener() {  @Override  public void ...

    android 全屏去掉底部虚拟导航栏的方法

    如下所示: @Override public void onWindowFocusChanged(boolean hasFocus) { super.onWindowFocusChanged(hasFocus); if (hasFocus) { getWindow().getDecorView...| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.

    WelcomeVideoPager-仿蚂蜂窝自由行和慕课网视频欢迎页.zip

     android:src="@mipmap/dot_focus" />    android:id="@ id/iv2"  android:layout_width="10dp"  android:layout_height="10dp"  android:layout_marginLeft="10dp"  android:src="@mipmap/dot_...

    史上最全的ios开发源码

    视图切换(View Transition)GuideViewController 视图切换类-3D浏览器 视图切换类--zaker应用进入画面效果 视图切换之视图切换大小渐变效果 手势交互--物体根据重力感应运动 手势交互之Drag View 手势交互之Touch ...

    Android中获取控件宽高的4种方法集合

    这个方法会被调用多次,在View初始化完毕后会调用,当Activity的窗口得到焦点和失去焦点都会被调用一次(Activity继续执行和暂停执行时)。 @Override public void onWindowFocusChanged(boolean hasFocus) { ...

    ViewPager 放大缩小左右移动

    setDescendantFocusability(FOCUS_AFTER_DESCENDANTS); setFocusable(true); final Context context = getContext(); mScroller = new Scroller(context, sInterpolator); final ViewConfiguration ...

Global site tag (gtag.js) - Google Analytics