0

을 사용하여 표시합니다. 내 응용 프로그램은 내포 된 활동이있는 TabHost 및 ActivityGroup로 구성됩니다. ActivityGroup의 활동이 생성되거나 다시 시작되면 소프트 키보드가 즉시 표시됩니다. EditText를 클릭하기 만하면됩니다. 내 ActivityGroup 클래스 :소프트 키보드는 항상 ActivityGroup 및 TabHost를 사용하여

public class LoginTabGroup extends ActivityGroup { 

private ArrayList<String> mIdList; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     if (mIdList == null) mIdList = new ArrayList<String>(); 
    } 

/** 
* This is called when a child activity of this one calls its finish method. 
* This implementation calls {@link LocalActivityManager#destroyActivity} on the child activity 
* and starts the previous activity. 
* If the last child activity just called finish(),this activity (the parent), 
* calls finish to finish the entire group. 
*/ 
@Override 
public void finishFromChild(Activity child) { 
LocalActivityManager manager = getLocalActivityManager(); 
int index = mIdList.size()-1; 

if (index < 1) { 
finish(); 
return; 
} 

manager.destroyActivity(mIdList.get(index), true); 
mIdList.remove(index); 
index--; 
String lastId = mIdList.get(index); 
Intent lastIntent = manager.getActivity(lastId).getIntent(); 

Window newWindow = manager.startActivity(lastId, lastIntent); 
newWindow.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); 
Log.i("ActivityGroup","finishFromChild method"); 
setContentView(newWindow.getDecorView()); 
} 

/** 
* Starts an Activity as a child Activity to this. 
* @param Id Unique identifier of the activity to be started. 
* @param intent The Intent describing the activity to be started. 
* @throws android.content.ActivityNotFoundException. 
*/ 
public void startChildActivity(String Id, Intent intent) 
{ 
    Window window = getLocalActivityManager().startActivity(Id,intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)); 
    window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN); 
    Log.i("ActivityGroup","startActivity method"); 
    if (window != null) { 
    mIdList.add(Id); 
    setContentView(window.getDecorView()); 
    } 
} 

/** 
* The primary purpose is to prevent systems before android.os.Build.VERSION_CODES.ECLAIR 
* from calling their default KeyEvent.KEYCODE_BACK during onKeyDown. 
*/ 
@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if (keyCode == KeyEvent.KEYCODE_BACK) { 
    //preventing default implementation previous to android.os.Build.VERSION_CODES.ECLAIR 
    return true; 
    } 
    return super.onKeyDown(keyCode, event); 
} 

/** 
* Overrides the default implementation for KeyEvent.KEYCODE_BACK 
* so that all systems call onBackPressed(). 
*/ 
@Override 
public boolean onKeyUp(int keyCode, KeyEvent event) { 
    if (keyCode == KeyEvent.KEYCODE_BACK) { 
    onBackPressed(); 
    return true; 
    } 
    return super.onKeyUp(keyCode, event); 
} 

/** 
* If a Child Activity handles KeyEvent.KEYCODE_BACK. 
* Simply override and add this method. 
*/ 
    @Override 
    public void onBackPressed() { 
    int length = mIdList.size(); 
    if (length > 1) { 
    Activity current = getLocalActivityManager().getActivity(mIdList.get(length-1)); 
    current.finish(); 
    } 
} 
} 

나는 새로운 창 생성시이 newWindow.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

처럼하려고 노력하지만, 도움이되지 않았다. 접근 방식은 내포 된 활동에서 제대로 작동하지만 활동 작성 또는 다시 시작 키보드에서 보여 주었다가 즉시 숨 깁니다.

InputMethodManager imm = (InputMethodManager)getSystemService(
       Context.INPUT_METHOD_SERVICE); 
    imm.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY, 0); 

나는 키보드 깜박임 때문에 좋은 해결책이라고 생각하지 않는다. 또한 AndroidManifest에 추가하려고 시도했습니다.

둘 다 중첩 된 Activities, ActivityGroups에 추가하려고했습니다. 그러나 결과는 동일하게 유지됩니다. 이 문제를 어떻게 해결할 수 있습니까?

답변

0

ActivityGroup을 사용하면 정말 나쁘고 느린 솔루션입니다. 탭에 중첩 된 조각으로 FragmentActivities를 사용하기로 결정했습니다. 그럼에도 불구하고 때때로 활동이 시작될 때 소프트 키보드가 나타납니다. 이미지가없는 탭 중 하나에 텍스트를 가운데로 설정했습니다. Soft keyboard showing이라고 부릅니다. 내 수정 (TabActivity 클래스) :

final View view = tabHost.getTabWidget().getChildTabViewAt(1); 
     if (view != null) { 
     // view.getLayoutParams().height *= 0.66; 
      InputMethodManager imm2 = (InputMethodManager)getSystemService(
        Context.INPUT_METHOD_SERVICE); 
      imm2.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY, 0); 
      // get title text view 
      final View textView = view.findViewById(android.R.id.title); 
      if (textView instanceof TextView) { 
       // just in case check the type 

       // center text 
       ((TextView) textView).setGravity(Gravity.CENTER); 
       // wrap text 
       ((TextView) textView).setSingleLine(false); 
       // explicitly set layout parameters 
       textView.getLayoutParams().height = ViewGroup.LayoutParams.FILL_PARENT; 
       textView.getLayoutParams().width = ViewGroup.LayoutParams.WRAP_CONTENT; 
      } 
     } 
0

레이아웃의 edittext가 포커스를받을 수있는 요소이고 다른 요소가 요청하지 않으면 시작에 초점을 요청하기 때문에 이러한 현상이 발생합니다. 해결책은 간단합니다. 모든 레이아웃 파일에서 컨테이너 레이아웃에서 focusable 및 focusableInTouchMode를 true로 설정하여 초점을 먼저 요청하고 텍스트 편집에 집중하지 않도록합니다. 그럼 당신은 암시 적으로 숨어 삭제할 수 있습니다)

android:focusable="true" 
android:focusableInTouchMode="true" 
+0

그게 '도와주세요 .. –

0

나는이 문제에 대한 해킹을 사용했습니다. ActivityGroup 클래스 및 하위 활동 모두에서 onCreate() 및 onResume() 메서드 앞에

앞에 나와 있습니다. 알고있는 사람이 나에게 더 효과적인 해결책을 말해 준다면 나는 감사 할 것이다.

관련 문제