레이아웃을 만들고 표시할 때 뷰에 포커스를 설정하는 방법은 무엇입니까?
현재, 저는 다음 레이아웃을 가지고 있습니다.Button
,aTextView
그리고EditText
레이아웃이 표시되면 포커스가 자동으로 배치됩니다.EditText
그러면 키보드가 Android 폰에 표시됩니다.그것은 내가 원하는 것이 아니다.제가 초점을 맞출 수 있는 방법이 있을까요?TextView
또는 레이아웃이 표시될 때 아무것도 표시되지 않습니다.
포커스 설정:프레임워크는 사용자의 입력에 따라 이동 포커스를 처리합니다.특정 뷰에 포커스를 강제로 표시하려면 requestFocus()를 호출합니다.
이 방법은 다음과 같습니다.
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
다음을 추가해야 합니다.
android:focusableInTouchMode="true"
세트
android:focusable="true"
당신의 안에서<EditText/>
포커스를 설정하려면 핸들러를 사용하여 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();
}
}
);
}
}
키보드를 숨겨도 돼요.다음과 같은 경우:
InputMethodManager inputManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
inputManager.hideSoftInputFromWindow(this.getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
해라
comp.requestFocusInWindow();
다음 행 설정OnResume
또한 만약을 위해focusableInTouch
컨트롤을 초기화하는 동안 true로 설정됩니다.
<controlName>.requestFocus();
<controlName>.requestFocusFromTouch();
포커스를 변경하려면 xml의 텍스트뷰를 포커스로 설정합니다.
<TextView
**android:focusable="true"**
android:id="@+id/tv_id"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
java로 작성 시
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);
}
위의 답변 중 어느 것도 나에게는 통하지 않는다.유일한 (예를 들어) 솔루션은 포커스를 수신하는 비활성화된 EditText의 첫 번째 TextView를 변경한 후 추가하는 것입니다.
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
[ Create Callback ]에서 키보드가 표시되지 않도록 합니다.첫 번째 EditText는 TextView와 비슷하지만 첫 번째 포커스를 얻을 수 있습니다.
마지막 제안은 올바른 해결책입니다.다시 한 번 말하지만, 첫 번째 세트android:focusable="true"
레이아웃으로xml
파일, 그 후requestFocus()
코드의 뷰에 표시됩니다.
텍스트 뷰는 초점이 안 맞는 것 같아요.예를 들어 버튼에 포커스를 설정하거나 포커스가 있는 속성을 true로 설정합니다.
사이즈가 0 dip인 편집 텍스트를 ur xml의 첫 번째 컨트롤로 추가하면 렌더링에 초점을 맞출 수 있습니다.(포커스가 가능하고 모두...)
를 추가하는 것으로 시작할 수 있습니다.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()
다만, 터치 모드일 때는, 포커스가 무효가 되는 것에 주의해 주세요.따라서 손가락을 사용하고 있다면, 프로그램적으로 초점을 바꾸는 것은 아무 것도 하지 않습니다.입력 편집기에서 입력을 수신하는 보기는 예외입니다.안EditText
한 상황에 대해서는setFocusableInTouchMode(true)
소프트 키보드가 입력의 송신지를 통지하기 위해서 사용합니다. 안EditText
에는 기본적으로 이 설정이 있습니다.소프트 키보드가 자동적으로 팝업 됩니다.
소프트 키보드가 자동적으로 표시되지 않게 하려면 , @abeljus가 지적한 대로 일시적으로 억제할 수 있습니다.
InputMethodManager inputManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
inputManager.hideSoftInputFromWindow(this.getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
가 [ ]를했을 때EditText
키보드는
추가 정보:
추가할 수 있습니다.
android:importantForAccessibility="yes"
android:focusable="true"
android:focusableInTouchMode="true"
[ Layout ](레이아웃)으로 이동하여 Talkback/Accessibility를 강제로 실행합니다.
실제로 필요한 것은 첫 번째 행뿐이지만, 다른 행은 OS에 중점을 두고 있는 내용을 보강합니다.
다음 Kotlin 확장자를 사용할 수 있습니다.
fun View.focusAndShowKeyboard() {
/**
* This is to be called when the window already has focus.
*/
fun View.showTheKeyboardNow() {
if (isFocused) {
post {
// We still post the call, just in case we are being notified of the windows focus
// but InputMethodManager didn't get properly setup yet.
val imm = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
imm.showSoftInput(this, InputMethodManager.SHOW_IMPLICIT)
}
}
}
requestFocus()
if (hasWindowFocus()) {
// No need to wait for the window to get focus.
showTheKeyboardNow()
} else {
// We need to wait until the window gets focus.
viewTreeObserver.addOnWindowFocusChangeListener(
object : ViewTreeObserver.OnWindowFocusChangeListener {
override fun onWindowFocusChanged(hasFocus: Boolean) {
// This notification will arrive just before the InputMethodManager gets set up.
if (hasFocus) {
this@focusAndShowKeyboard.showTheKeyboardNow()
// It’s very important to remove this listener once we are done.
viewTreeObserver.removeOnWindowFocusChangeListener(this)
}
}
}
)
}
}
그냥 하세요.view.focusAndShowKeyboard()
override fun onViewCreated(..)
★★★★★★★★★★★★★★★★★」override fun OnCreate(..)
PS: 보기를 숨기려면 다음 확장자를 사용합니다.
fun View.hideKeyboard() {
val imm = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
imm.hideSoftInputFromWindow(windowToken, 0)
}
다음 Android XML 속성을 사용하여 프로그래밍 방식으로도 뷰에 초점을 맞출 수 있는지 확인하십시오.
android:focusableInTouchMode="true"
android:focusable="true"
언급URL : https://stackoverflow.com/questions/2150656/how-to-set-focus-on-a-view-when-a-layout-is-created-and-displayed
'source' 카테고리의 다른 글
연결 없이 자바스크립트에서 변수를 문자열로 보간하려면 어떻게 해야 합니까? (0) | 2022.10.13 |
---|---|
필드 'id'에 기본값이 없습니다. (0) | 2022.10.13 |
pip install --user와 함께 설치된 패키지를 제거하는 방법 (0) | 2022.10.13 |
ddev에서 두 번째 데이터베이스를 만들고 로드하려면 어떻게 해야 합니까? (0) | 2022.10.03 |
MariaDB 서버는 우리가 재현할 수 있는 어떤 것보다도 10배 빠르게 작동합니다.아이디어 왜? (0) | 2022.10.03 |