현재, Button
a TextView
및 EditText
. 레이아웃이 표시되면 포커스가 자동으로에 놓 EditText
이고 키보드가 Android 휴대폰에 표시되도록 트리거합니다. 내가 원하는 것이 아닙니다. TextView
레이아웃이 표시 될 때 포커스를 설정 하거나 아무것도 설정 하지 않을 수있는 방법이 있습니까?
현재, Button
a TextView
및 EditText
. 레이아웃이 표시되면 포커스가 자동으로에 놓 EditText
이고 키보드가 Android 휴대폰에 표시되도록 트리거합니다. 내가 원하는 것이 아닙니다. TextView
레이아웃이 표시 될 때 포커스를 설정 하거나 아무것도 설정 하지 않을 수있는 방법이 있습니까?
답변:
포커스 설정 : 프레임 워크는 사용자 입력에 대한 응답으로 이동 포커스를 처리합니다. 특정보기에 초점을 맞추려면 requestFocus ()를 호출하십시오.
이것은 작동합니다 :
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
포커스를 설정하려면 핸들러를 사용하여 requestFocus ()를 지연합니다.
private Handler mHandler= new Handler();
public class HelloAndroid extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
LinearLayout mainVw = (LinearLayout) findViewById(R.id.main_layout);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.FILL_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT);
EditText edit = new EditText(this);
edit.setLayoutParams(params);
mainVw.addView(edit);
TextView titleTv = new TextView(this);
titleTv.setText("test");
titleTv.setLayoutParams(params);
mainVw.addView(titleTv);
mHandler.post(
new Runnable()
{
public void run()
{
titleTv.requestFocus();
}
}
);
}
}
이 줄도로 설정하고 컨트롤을 초기화하는 동안이 true로 설정되어 OnResume
있는지 확인하십시오.focusableInTouch
<controlName>.requestFocus();
<controlName>.requestFocusFromTouch();
포커스를 변경하려면 xml의 textView를 포커스 가능하게 만드십시오.
<TextView
**android:focusable="true"**
android:id="@+id/tv_id"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
그리고 자바에서 생성시
textView.requestFocus();
또는 단순히 키보드 숨기기
public void hideKeyBoard(Activity act) {
act.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
InputMethodManager imm = (InputMethodManager) act.getSystemService(Context.INPUT_METHOD_SERVICE);
}
텍스트보기가 초점을 맞출 수 없다고 생각합니다. 예를 들어 버튼에 포커스를 설정하거나 focusable 속성을 true로 설정하십시오.
파일 android:windowSoftInputMode
의 활동에 추가 하여 시작할 수 있습니다 AndroidManifest.xml
.
<activity android:name="YourActivity"
android:windowSoftInputMode="stateHidden" />
이렇게하면 키보드가 표시되지 않지만 EditText
여전히 포커스가 있습니다. 이를 해결하기 위해 루트 뷰에서 android:focusableInTouchmode
및 android:focusable
로 설정할 수 true
있습니다.
<LinearLayout android:orientation="vertical"
android:focusable="true"
android:focusableInTouchMode="true"
...
>
<EditText
...
/>
<TextView
...
/>
<Button
...
/>
</LinearLayout>
위의 코드 RelativeLayout
는 대신 포커스를 받고 있는지 확인합니다.EditText
포커스는 터치 이외의 것을 사용할 때 (예 : d- 패드, 키보드 등) UI 구성 요소를 선택하는 데 사용됩니다. 모든 뷰는 포커스를받을 수 있지만 일부는 기본적으로 포커스를받을 수 없습니다. (뷰에 setFocusable(true)
초점을 맞출 수 있으며 초점을 맞출 수 있습니다.requestFocus()
.)
그러나 터치 모드에서는 포커스가 비활성화 된다는 점에 유의해야합니다 . 따라서 손가락을 사용하는 경우 프로그래밍 방식으로 포커스를 변경해도 아무 효과가 없습니다. 이에 대한 예외는 입력 편집기에서 입력을받는 뷰의 경우입니다. An EditText
이 그러한 예입니다. 이 특별한 상황 setFocusableInTouchMode(true)
에서는 소프트 키보드가 입력을 보낼 위치를 알려주는 데 사용됩니다. An EditText
에는 기본적으로이 설정이 있습니다. 소프트 키보드가 자동으로 나타납니다.
소프트 키보드가 자동으로 팝업되지 않도록하려면 @abeljus가 언급 한대로 일시적으로 억제 할 수 있습니다.
InputMethodManager inputManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
inputManager.hideSoftInputFromWindow(this.getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
사용자가를 클릭 EditText
해도 키보드가 계속 표시되어야합니다.