android中设置控件获得焦点

android中,要使控件获得焦点,需要先setFocus,再requestFocus。

以Button为例:
                btn.setFocusable(true);
                btn.setFocusableInTouchMode(true);
                btn.requestFocus();
                btn.requestFocusFromTouch();

//获得失去焦点的监听器

btn.setOnFocusChangeListener(new OnFocusChangeListener() {

  @Override
  public void onFocusChange(View v, boolean hasFocus) {
   // TODO Auto-generated method stub
   if (hasFocus) {
    btn_box.setBackgroundResource(R.drawable.book_green);
   }else {
    btn_box.setBackgroundResource(R.drawable.book);
   }
  }
 });

1. 背景色:       listView设置背景色android:background="@drawable/bg",拖动或者点击list空白位置的时候发现ListItem都变成黑色。 因为默认的ListItem背景是透明的,而ListView的背景是固定不变的,所以在滚动条滚动的过程中如果实时地去将当前每个Item的显示内容跟背景进行混合运算,所以android系统为了优化这个过程用,就使用了一个叫做android:cacheColorHint的属性,在黑色主题下默认的颜色值是#191919,所以就出现了刚才的画面,有一半是黑色的。

 如果你只是换背景的颜色的话,可以直接指定android:cacheColorHint为你所要的颜色;如果你是用图片做背景的话,那也只要将android:cacheColorHint指定为透明(#00000000)就可以了,当然为了美化是要牺牲一些效率的。 

2. android:fadingEdge="none"   去掉上边和下边黑色的阴影

3. android:divider="@drawable/list_driver"     其中 @drawable/list_driver 是一个图片资源lsitview的每一项之间需要设置一个图片做为间隔 

设置Item之间无间隙

android:divider="#00000000" 或者在javaCode中如下定义:listView.setDividerHeight(0);

 4. android:listSelector="@color/pink" listView item 选中时的颜色。默认为橙黄底色。

 5. android:divider="@drawable/list_driver" 设置分割线的图片资源,如果则只要设置为

     android:divider="@drawable/@null" 不想显示分割线

 

 6. android:scrollbars="none"   setVerticalScrollBarEnabled(true);  隐藏listView的滚动条

 7. android:fadeScrollbars="true"  设置为true就可以实现滚动条的自动隐藏和显示

 8. android:transcriptMode="alwaysScroll"  用ListView或者其它显示大量Items的控件实时跟踪或者查看信息,希望最新的条目可以自动滚动到可视范围内。通过设置的控件transcriptMode属性可以将Android平台的控件(支持ScrollBar)自动滑动到最底部。

        android:fastScrollEnabled="false"
        android:fastScrollEnabled = "true"  加快滑动速度

    android:drawSelectorOnTop="false" 
    android:scrollingCache="false"  ??????????????

 

android:drawSelectorOnTop="true" 点击某一条记录,颜色会显示在最上面,记录上的文字被遮住,所以点击文字不放,文字就看不到

android:drawSelectorOnTop="false" 点击某条记录不放,颜色会在记录的后面,成为背景色,但是记录内容的文字是可见的

When set to true, the selector will be drawn over the selected item. Otherwise the selector is drawn behind the selected item. The default value is false.

 9.在ListView中添加属性:
android:scrollbarTrackVertical="@drawable/scrollbar_vertical_track" android:scrollbarThumbVertical="@drawable/scrollbar_vertical_thumb"
scrollbar_vertical_track,crollbar_vertical_thumb自定义的xml文件,放在Drawable中,track是指长条,thumb是指短条,然后再xml中定义短条和长条的样式

  在项目的开发过程中,需要Listview的Item中包含按钮的效果。在实际开发过,Item中放置按钮后,ListView 单行选择背景颜色变化的效果没有了。

 

问题原因

    ListView 和 其它能触发点击事件的widget无法一起正常工作的原因是加入其它widget后,ListView的itemclick事件将无法触发,被其它widget的click事件屏蔽。

 

目前网络上普遍的解决方式

设置1 
在Item的xml模板中设置 根布局 属性

 android:descendantFocusability= "blocksDescendants"

 

如下:

< RelativeLayout>

android:descendantFocusability= "blocksDescendants"

 

设置2
在按钮控件<ImageButton>中设置属性

 

android:focusable = "false"

补充:这种设置后,点击按钮,整条Item都响应点击效果,显示的效果非我们需要的

 

我们的需要的效果

1 ListView的Item本身可以选择

2 Item中的按钮可以随意点击,不会干扰Item

 

实现的过程

 在ListView中用图片控件,或者文本控件,来代替图片按钮和普通按钮,并在Adapter中设置点击事件就可以

 如例:

 

//根据数据项,设置点击文本框的文字,并设置点击事件        TextView txt_Remember=(TextView)convertView.findViewById(R.id.txt_Remember);                txt_Remember.setOnClickListener(new  TextView.OnClickListener()        {            public void onClick(View v){                LibListViewAdapter.this.remove(LibListViewAdapter.this.getItem(1));                            }        });
时间: 2024-10-31 12:54:01

android中设置控件获得焦点的相关文章

android代码布局-android 代码中设置控件的垂直居中和两个控件之间的距离。

问题描述 android 代码中设置控件的垂直居中和两个控件之间的距离. 因为数据是动态的 所以所有的控件和布局都是在java代码里面设置 怎样才能让一个控件垂直居中 还有两个控件之间的距离又是怎么设置的啊 求高手指点啊 最好能给点代码 我是新手 说的太笼统了 看不太懂 谢谢了 解决方案 LinearLayout.LayoutParams params = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.FILL_PARENT,

Android线程中设置控件的值提示报错的解决方法_Android

本文实例讲述了Android线程中设置控件的值提示报错的解决方法.分享给大家供大家参考,具体如下: 在Android线程中设置控件的值一般会与Handler联合使用,如下: package com.yarin.android.Examples_04_15; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.os.Message; import andro

Android线程中设置控件的值提示报错的解决方法

本文实例讲述了Android线程中设置控件的值提示报错的解决方法.分享给大家供大家参考,具体如下: 在Android线程中设置控件的值一般会与Handler联合使用,如下: package com.yarin.android.Examples_04_15; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.os.Message; import andro

分享Android中ExpandableListView控件使用教程_Android

本文采用一个Demo来展示Android中ExpandableListView控件的使用,如如何在组/子ListView中绑定数据源.直接上代码如下: 程序结构图: layout目录下的 main.xml 文件源码如下: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android

控件抖动-android中实现控件持续抖动的问题

问题描述 android中实现控件持续抖动的问题 直接上代码:class doudong extends Thread{ public void run() { shakeAnim = AnimationUtils.loadAnimation(mContext R.anim.shake_y); while(s){ passWd.startAnimation(shakeAnim); } }} 我相信这种方法实现控件抖动大神们应该知道吧,我把这个抖动方法写在一个线程中,然后在UI线程中启动这个线程,

分享Android中ExpandableListView控件使用教程

本文采用一个Demo来展示Android中ExpandableListView控件的使用,如如何在组/子ListView中绑定数据源.直接上代码如下: 程序结构图: layout目录下的 main.xml 文件源码如下: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android

请问android中的控件被无论如何引用后是不是操作的都是同一个控件

问题描述 请问android中的控件被无论如何引用后是不是操作的都是同一个控件 我写了一个简单的test安卓程序,就是点击菜单textview中的文字变色,这个程序是在上一个练习--实现listview显示列表,然后我发现虽然我引用的都是同一个控件,但是只有textview中的文字变色了,可是listview中的文字却没有变色,实在想不明白,莫非不是同一个textview控件吗???? 补上源代码: protected void onCreate(Bundle savedInstanceStat

Android中Spinner控件之键值对用法实例分析_Android

本文实例讲述了Android中Spinner控件之键值对用法.分享给大家供大家参考.具体如下: 一.字典表,用来存放键值对信息 package com.ljq.activity; import java.io.Serializable; @SuppressWarnings("serial") public class Dict implements Serializable { private Integer id; private String text; public Dict()

android中textview控件中的文字的位置是如何调整的

问题描述 android中textview控件中的文字的位置是如何调整的 android中textview控件中的文字的位置是如何调整的 像缩进 靠左 居中 这些概念有吗 解决方案 http://jingyan.baidu.com/article/c85b7a640641dc003aac9562.html 百度很多 解决方案二: 有,而且还有更多属性 解决方案三: 位置可以用android:gravity控制,比如: android:gravity="center" 缩进可以用andr