这是布局:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<RelativeLayout
android:id="@+id/first_tv_container"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:focusable="true"
android:background="@android:drawable/list_selector_background">
<TextView
android:id="@+id/first_tv"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua."
android:singleLine="true"
android:ellipsize="marquee"
android:duplicateParentState="true"/>
</RelativeLayout>
<TextView
android:id="@+id/second_tv"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua."
android:singleLine="true"
android:ellipsize="marquee"
android:focusable="true"
android:background="@android:drawable/list_selector_background"/>
</LinearLayout>
当second_tv获得焦点时,second_tv的选框将按预期方式激活。当first_tv_container成为焦点时,我也希望first_tv的标志也是如此。我以为在first_tv中添加duplicaParentState = true可以达到目的,但事实并非如此。所以我的问题是:是否有一种标准,简单的方法来使TextView选框在一个聚焦的ViewGroup(而不是ListView,它可以自动正确处理情况)中工作而不扩展和覆盖很多东西?
问候
最佳答案
好的,我找到了某种方法。我将android:focusable =“ true”添加到first_tv,并实例化了first_tv_container作为RelativeLayout的扩展版本,在其中我声明了DescendantFocusability =“ blocksDescendants”,并定义了以下覆盖:
@Override
protected void onFocusChanged(boolean gainFocus, int direction, Rect previouslyFocusedRect)
{
super.onFocusChanged(gainFocus, direction, previouslyFocusedRect);
setSelected(gainFocus);
dispatchSetSelected(gainFocus);
}
正是我想避免的那种东西,但是现在就可以了。
关于android - 如何在聚焦的ViewGroup中激活TextView的选取框?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4474178/