android电视 我在layout如果只给3个textview设置focusable为true

android电视 我在layout如果只给3个textview设置focusable为true 在实际操作过程中我按上下键 3个text还是会被抢去焦点 原因是什么啊

最近无意间看到了涉及到跑马灯效果的代码,于是在网上查阅了很多资料,在这里对自己看的一些文章进行一下总结,顺便加上自己的一些体会。
让我们一步步逐渐向下。
首先我们要实现走马灯这样一个效果,通常来说都是在TextView这个控件中来实现的,而且其中的文字一定是单行显示,如果多行显示,那走马灯效果
也就失去了存在的意义。另外,在EditText中使用走马灯没有必要,也不合理,实际上对于EditText来说android:ellipsize这个属性只有对于设置在android:hint中的文字
的时候是有用的,而且android:ellipsize="marquee"这个用法不能用在EditText控件上。对于在EditText用户输入的文字,android:ellipsize这个属性没有用处。关于EditText
设置android:ellipsize的相关用法以后再讲,在这里也算留个标记,以防自己忘了。
在TextView中实现我们的走马灯效果,需要两个属性android:singleLine="true",以及android:ellipsize="marquee",我们来看下面的代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >

<TextView
android:layout_width="100dip"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="走马灯效果的演示"
android:singleLine="true"
android:ellipsize="marquee"/>

</LinearLayout>
运行这段代码之后,我们会发现走马灯效果并没有显示出来,显示出的文字是不动的,实际效果如下:

这其中的原因在于跑马灯效果需要TextVIew获得当前的焦点(focus)。然而对于TextView这个控件来说,他的默认的Clickable,LongClickable,Focusable,
FocusableInTouchMode这四个属性的值都是false,所以跑马灯效果也就不会出来了,即使你用手触摸TextView或者按下手机上的导航按键(现在的手机没这
个东东了都。。。)也是无法显示跑马灯的效果的。
解决这个问题我们就需要让我们的TextView得到焦点,这里主要涉及android:focusable和android:focusableInTouchMode这两个属性,简单来说把这两个属性都设置成
true,那么在运行程序以后跑马灯效果就显示出来了,这里就不再贴这两行代码了。
但是细细品味这两个属性之后发现其中其实还是有一些玄机的:
1.。如果这两个属性设置成android:focusable="true"以及android:focusableInTouchMode="false",那么会发现程序运行之后,走马灯效果没有出现,
这个时候需要用户按下手机或者模拟器上的上下导航键,才能让走马灯的效果出现,这说明android:focusable是针对于手机按键有效的,然而根据api的解释,
android:focusableInTouchMode是根据屏幕触摸决定的。
2。如果这两个属性设置成android:focusable="false"与android:focusableInTouchMode="true",那么无论如何走马灯都出现不了了,就算加上android:clickable="true"
也不行,这说明 android:focusable="true"是android:focusableInTouchMode="true"能有效的先决条件,我推测可能是在源码实现中,android:focusableInTouchMode
的逻辑是嵌套在android:focusable中的,这个有待于以后进一步的研究,路漫漫其修远兮。。。
3。在把这两个属性都设置成true以后,会发现程序运行之后,走马灯效果自动就显现了出来,这说明应用在运行后,会自动地按照某种顺序(在这里应该是自上而下),
寻找第一个android:focusableInTouchMode="true"这个属性有效的第一个控件,当然要使这个属性有效按照前面的讨论android:focusable="true"也必须具备。根据测试,
LinearLayout的Clickable,LongClickable,Focusable,FocusableInTouchMode这四个属性默认也都是false,因此,在上面的例子中TextView就率先获得了焦点,
走马灯也就走了起来了。

附上出处链接:http://www.cnblogs.com/Gaojiecai/archive/2013/06/18/3142783.html追问

呵呵 朋友 你混分也不知这样混的吧.....

温馨提示:内容为网友见解,仅供参考
第1个回答  2017-03-18
focusableInTouchMode

用这个,触碰到就获得焦点

Android中TextView如何实现水平和垂直滚动
android:singleLine="true",因为TextView默认是会自动换行的android:marqueeRepeatLimit="marquee_forever"是设置永远重复,当然你也可以设置具体的数字android:focusable="true"和android:focusableInTouchMode="true"一定要加上,不然滚动效果出不来在Java代码中加入下面一句话就可以实现垂直滚动 ...

android textview 怎么实现文字滚动
android:layout_centerVertical="true"android:layout_toRightOf="@id\/zhuanjitp"android:singleLine="true"\/\/view单行显示 android:ellipsize="marquee"\/\/滚动样式 android:focusable="true"\/\/可聚焦的 android:focusableInTouchMode="true"\/\/触摸获得焦点 android:marqueeRepeatLimit="marquee_forever" \/\/文...

android TextView滚动条设置android:ellipsize="marquee" android:s...
height="50px" android:layout_marginBottom="2px" android:id="@+id\/speaker" android:text="@string\/speaker"><\/Button><Button android:layout_width="fill_parent" android:gravity="left" android:textSize="25sp" android:layout_height="50px" android:layout_marginBottom="2px" android:i...

android 代码中设置控件的垂直居中和两个控件之间的距离。
你可以设置该text 在view的靠左,靠右等位置.以button为例,android:gravity=”right”则button上面的文字靠右 android:layout_gravity android:layout_gravity是用来设置该view相对与起父view 的位置.比如一个button 在linearlayout里,你想把该button放在靠左、靠右等位置就可以通过该属性设置.以button为例,android:layout_...

安卓开发怎么在button按钮上添加两行文字
> <TextView android:text="text1" android:layout_width="fill_parent" android:gravity="center_horizontal" android:layout_height="wrap_content" android:layout_weight="1"\/> <TextView android:text="text2" android:layout_width="fill_parent" android:layout_height="wrap_content" android:...

TextView的跑马灯效果为什么滚动不起来
android:ellipsize="middle" 省略号在中间 android:ellipsize="end" 省略号在结尾 android:ellipsize="marquee" 跑马灯显示 或者在程序中可通过setEillpsize显式设置。android:focusable="true" \/\/要显示该跑马灯,view必须要获得焦点,只有在取得焦点的情况下跑马灯才会显示 ...

android 代码中设置控件的垂直居中和两个控件之间的距离。
android:gravity android:gravity属性是对该view 内容的限定.比如一个button 上面的text. 你可以设置该text 在view的靠左,靠右等位置.以button为例,android:gravity=”right”则button上面的文字靠右 android:layout_gravity android:layout_gravity是用来设置该view相对与起父view 的位置.比如一个button 在linearlayout里...

如何实现自定义列表的多个item,的单选或多选
自定义ListView item中包含一个textview 和checkbox,checkbox选中级别高于item,故在xml中进行屏蔽 单选方法:(该方法同样适用于radiobutton) main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http:\/\/schemas。android。com\/apk\/res\/android" android:layout_width="match_parent" and...

如何获得textview的ellipsize的属性
3,ellipsize等于start <TextView android:id="@+id\/textview"android:layout_width="200dp"android:layout_height="wrap_content"android:layout_centerInParent="true"android:background="#EEEE00"android:ellipsize="start"android:singleLine="true"android:text="@string\/hello_world"android:textSize=...

如何在 Android 应用程序中使用自定义主题
Android 应用程序中使用自定义主题的方法:1、新建一个项目 Lesson32_StyleAndTheme。2、拷贝下面三张 Nine-Patch PNG图片到res\/drawable目录下:3、在按钮的同目录下建立一个文件btn_custom.xml,把上述3张图片整合成一个按钮背景文件,让三张图片成为不同状态下的按钮表现效果。具体写法如下:<?xml ...

相似回答