2010-08-16 69 views
17

我的活动中有一个EditText和一个TextView。我想在活动启动时将焦点设置在TextView上。我用下面的代码:如何在活动启动时在TextView上设置焦点?

TextView myTextView = (TextView) findViewById(R.id.my_text_vew); 
    myTextView.setFocusable(true); 
    myTextView.setOnClickListener(this); 
    myTextView.requestFocus(); 

但是代码不起作用。当活动开始时,EditText总是获得焦点。

任何人都可以帮忙吗?

谢谢。

回答

13

这是您使用触摸屏开始活动时的预期。当处于“触摸模式”时,只有几个视图(EditText和ListView)可以获得焦点。如果您使用轨迹球启动应用程序,您将看到TextView的焦点。你所看到的是正确和预期的结果。

+1

如何做相反的事情。例如,我有一个数字编辑区作为第一个UI对象,并且总是接收焦点并弹出键盘。我不想让键盘弹出。 – Pentium10 2010-08-16 20:12:59

+0

所以,我需要将TextView设置为可在触摸模式下进行对焦? – user256239 2010-08-16 21:30:41

11

我现在碰到你的问题。也许在2年后你已经找到了解决方案。但我在这里为其他将来会遇到的人写下来。您唯一需要做的就是去AndroidManifest.xml,找到您想要这种行为的Activity并添加这个android:windowSoftInputMode="stateHidden"。因此,在Activity开始时,不会显示任何键盘,直到您触摸EditText对象。

8

如果有人仍然不知道,你可以使用你的布局XML以下,使在触摸模式下一个TextView可聚焦:

android:focusableInTouchMode="true" 
2

添加TextView的财产布局

android:focusable="false" 

这是工作为了我。

0

您可以将焦点设置为任何小部件或来自活动xml的TextView。只需在TextView结束之前添加requestFocus即可。

<AutoCompleteTextView 
     android:id="@+id/autoCompleteTextView2" 
     android:layout_width="470dp" 
     android:layout_height="wrap_content" 
     android:layout_marginStart="90dp" 
     android:layout_toEndOf="@+id/textView2" 
     android:ems="10" 
     android:textColor="#455A64" 
     android:textColorHint="#455A64" 
     android:textSize="27sp"> 

     <requestFocus /> 
    </AutoCompleteTextView> 
4

为了请求焦点的TextView需要设置focusable="true"focusableInTouchMode="true"如下:

<TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="Heading" 
      android:textSize="20sp" 
      android:textStyle="bold" 
      android:focusable="true" 
      android:focusableInTouchMode="true"> 
       <requestFocus /> 
    </TextView> 
2

使用此:

EditText mEditText = (EditText) findViewById(R.id.edit_text); 
TextView myTextView = (TextView) findViewById(R.id.my_text_vew); 

mEditText.setFocusable(false); 
myTextView.setFocusable(true); 

这需要集中关闭的EditText 将它放在TextView上。