gpt4 book ai didi

android - 当焦点从 EditText 变为 Button 时,ActionBarSherlock 操作栏消失

转载 作者:搜寻专家 更新时间:2023-11-01 08:10:24 25 4
gpt4 key购买 nike

我有一个简单的登录布局,其中包含两个 EditText 字段和一个用于登录的按钮。问题是当软键盘打开时 ActionBar 消失,我将焦点从 EditText 更改为 Button,当我按下返回时 ActionBar 又回来了。当软键盘关闭并且我使用 DPAD 浏览 EditTexts 和 Button 时,问题不会发生。

我用的是ActionBarSherlock,问题只出现在Android 2.x模拟器上,在4.x模拟器上一切正常。我知道 ActionBarSherlock 在可用的 Android 版本上使用 native ActionBar 实现,因此它可能是 ActionBarSherlock 代码的问题。

我还执行了一个测试来检查 ActionBar.isShowing() 的值,但即使 ActionBar 在屏幕上不可见,它也返回 true。

我不知道在这种情况下发生了什么,有人有一些想法吗?

布局 XML

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:ignore="UselessParent" >

<LinearLayout
android:layout_width="250dp"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:orientation="vertical" >

<EditText
android:id="@+id/username"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp"
android:hint="@string/username"
android:inputType="textNoSuggestions"
android:nextFocusUp="@+id/loginButton"
android:imeOptions="actionNext" />

<EditText
android:id="@+id/password"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp"
android:hint="@string/password"
android:inputType="textPassword"
android:imeOptions="actionDone" />

<Button
android:id="@+id/loginButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right"
android:text="@string/login"
android:textSize="20sp"
android:nextFocusDown="@+id/username" />

</LinearLayout>

</RelativeLayout>

fragment 代码

public class LoginFragment extends BaseFragment {

@InjectView(R.id.loginButton) protected Button mLoginButton;
@InjectView(R.id.username) protected EditText mUsernameEditText;
@InjectView(R.id.password) protected EditText mPasswordEditText;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.login, container, false);
}

@Override
public void onStart() {
super.onStart();

mLoginButton.setEnabled(allFieldsValid());
mLoginButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
handleLogin();
}
});

mPasswordEditText.setOnEditorActionListener(new TextView.OnEditorActionListener() {

@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_DONE && allFieldsValid()) {
handleLogin();
}
return false;
}
});

TextWatcher fieldValidatorTextWatcher = new TextWatcher() {
@Override
public void afterTextChanged(Editable s) {
}

@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}

@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
mLoginButton.setEnabled(allFieldsValid());
}
};

mUsernameEditText.addTextChangedListener(fieldValidatorTextWatcher);
mPasswordEditText.addTextChangedListener(fieldValidatorTextWatcher);
}

private void handleLogin() {
getSherlockActivity().setSupportProgressBarIndeterminateVisibility(true);

Intent intent = new Intent(getActivity(), LoginService.class);
intent.putExtra(BaseIntentService.EXTRA_STATUS_RECEIVER, mResultReceiver);
intent.putExtra(LoginService.PARAM_USERNAME, mUsernameEditText.getText().toString());
intent.putExtra(LoginService.PARAM_PASSWORD, mPasswordEditText.getText().toString());
getActivity().startService(intent);
}

private boolean allFieldsValid() {
return usernameFieldIsValid() && passwordFieldIsValid();
}

private boolean usernameFieldIsValid() {
return !TextUtils.isEmpty(mUsernameEditText.getText());
}

private boolean passwordFieldIsValid() {
return !TextUtils.isEmpty(mPasswordEditText.getText());
}

@Override
public void onReceiveResult(int resultCode, Bundle resultData) {
getSherlockActivity().setSupportProgressBarIndeterminateVisibility(false);
super.onReceiveResult(resultCode, resultData);
}

@Override
public void onReceiveResultSuccess(Bundle resultData) {
((LoginActivity) getActivity()).redirectToSelectTeamwebActivity(resultData.getInt(LoginService.RESULT_USER_ID));
}

@Override
public void onReceiveResultFailure(Bundle resultData) {
mPasswordEditText.setText("");
String errorMessage = getString(R.string.invalid_login_credentials);
Toast.makeText(getActivity(), errorMessage, Toast.LENGTH_LONG).show();
}

}

最佳答案

ActionBarSherlock 在内容 View 内的 pre-ICS 上附加一个兼容性操作栏,而不是在窗口的装饰 View 中。因此,它容易受到更多不便的影响,这些不便可能会导致像您所看到的那样的意外行为。

如果您已将 windowSoftInputMode 设置为在 IME 打开时平移内容 View ,操作栏将从屏幕上消失。解决此问题的简单方法是使用不同的模式(例如,调整大小),这将重新布局内容 View 并将操作栏保留在屏幕上。

关于android - 当焦点从 EditText 变为 Button 时,ActionBarSherlock 操作栏消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10258962/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com