textIsSelectable无法与Descendant一起使用Focusability = blocksDescendants

时间:2019-01-08 17:41:02

标签: android android-layout textview android-relativelayout

我遇到一个问题,即片段中的ScrollView会自动滚动到底部。因此,为解决此问题,我在this答案中建议在RelativeLayout中添加以下行:

INSERT INTO [Staging].[table] ([att1],[att2]) SELECT [att1], [att2] FROM [Staging].[vw_table]".

但是添加此行之后,android:descendantFocusability="blocksDescendants"停止工作。如何添加这两行?

这是XML:

textIsSelectable

3 个答案:

答案 0 :(得分:3)

android:descendantFocusability="blocksDescendants"中使用ViewGroup时,它将阻止其所有子视图获得焦点

有关更多信息,请查看文档

  

必须是android:descendantFocusability中以下常量值之一。

  1. afterDescendants :-仅当其后代都不希望时,ViewGroup才会获得焦点。
  2. beforeDescendants :-ViewGroup将在其任何后代之前获得焦点。
  3. blocksDescendants :-ViewGroup将阻止其后代获得焦点。

现在您的问题

  

但是添加此行之后,textIsSelectable停止工作。如何添加这两行?

AFAIK ,您不能同时使用两者

您需要为片段的自动滚动问题找到另一种解决方案

有些链接可能会帮助您解决将片段自动滚动到底部的问题

答案 1 :(得分:2)

首先,确保包含TextView的“相对布局”已将DescendantFocusability设置为“ Before Descendants”,focusable设置为“ true”,focusableInTouchMode设置为“ true”。接下来,在ScrollView中添加一个onTouchListener,以便在每次触摸TextView时将其移出焦点,就像这样:

container_of

答案 2 :(得分:2)

一种可能的方法是使用方法fullScroll。 根据文档

  

布尔布尔全滚动(int方向)

     

响应于“ home / end”快捷键按下而处理滚动。此方法会将视图滚动到顶部或底部,并将焦点集中到新可见区域中的最上面/最下面的组件。如果没有任何组件适合作为焦点,则此滚动视图将重新获得焦点。

     

int方向:滚动方向:View.FOCUS_UP进入视图顶部,或者View.FOCUS_DOWN进入底部

因此,您应该删除

android:descendantFocusability="blocksDescendants"

并添加以下几行

XML

android:id="@+id/myScrollView"

JAVA

myScrollView = (ScrollView)findViewById(R.id.myScrollView);
myScrollView.fullScroll(View.FOCUS_UP);