Спокойной ночи!
Я разрабатываю небольшое приложение на Android Studio
для проверки различных функций, связанных с SoftKeyboard
.
Мое приложение содержит Activity
и два Fragment
, содержащиеся в этом Activity
.
Второй Fragment
несущественен, поэтому он остается пустым.
Первый фрагмент содержит EditText
, RecyclerView
(который не будет содержать никаких данных) и ProgressBar
.
. Я ищу то, что при нажатии EditText
этоSoftKeyboard
открывается.На этом этапе, если пользователь покидает приложение и снова входит, я хочу, чтобы SoftKeyboard
оставался видимым.
В противном случае, если EditText
не имеет фокуса, когда приложение находится на переднем планеЯ хочу, чтобы SoftKeyboard
не было видно, а когда пользователь закрывает и снова открывает приложение, SoftKeyboard
не должно появляться.
С другой стороны;Когда пользователь нажимает кнопку подтверждения, связанную с EditText
и отображаемую через SoftKeyboard
, я хочу, чтобы ProgressBar
был видимым, но только в горизонтальном и вертикальном центре Activity
, не принимая во внимание, чтоклавиатура занимает, поскольку в противном случае ProgressBar
переместится из начальной позиции (с открытой клавиатурой) в конечную позицию (когда SoftKeyboard
закрыт), и я не хочу, чтобы этот эффект.
PD1 : пожалуйста, не отсылайте меня на другие страницы StackOverflow, потому что я проанализировал их все, и ни одна из них не работает для меня.
PD2: не учитывайте, что я вставил в изображения код файлов в формате XML.Я потратил 45 минут, пытаясь представить код в виде текста, но продолжал избавляться от ошибки отступа.
Я надеюсь, что вы можете мне помочь, и большое спасибо заранее.
MainActivity:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ViewPager viewPager = findViewById(R.id.viewPager);
setupViewPager(viewPager);
TabLayout TabLayout = findViewById(R.id.tabs);
TabLayout.setupWithViewPager(viewPager);
}
private void setupViewPager(ViewPager viewPager) {
SectionsPageAdapter adapter = new SectionsPageAdapter(getSupportFragmentManager());
adapter.addFragment(new Fragment1(), "Fragment1");
adapter.addFragment(new Fragment(), "Fragment2");
viewPager.setAdapter(adapter);
}
}
Фрагмент1:
public class Fragment1 extends Fragment {
private EditText mSearchEditText;
private ProgressBar mProgressBar;
private RecyclerView mRecyclerView;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_1, container, false);
mSearchEditText = view.findViewById(R.id.search_edit_text);
mSearchEditText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_SEARCH) {
hideSoftKeyboard(getActivity());
mProgressBar.setVisibility(View.VISIBLE);
return true;
}
return false;
}
});
mRecyclerView = view.findViewById(R.id.recycler_view);
mProgressBar = view.findViewById(R.id.progress_bar);
return view;
}
public void hideSoftKeyboard(Activity activity) {
if (activity.getCurrentFocus() == null) {
return;
}
InputMethodManager inputMethodManager = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
assert inputMethodManager != null;
inputMethodManager.hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), 0);
}
}
activity_main.xml :
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/activityRoot"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.design.widget.AppBarLayout
android:id="@+id/appbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="8dp"
android:theme="@style/AppTheme.AppBarOverlay">
<android.support.design.widget.TabLayout
android:id="@+id/tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:tabGravity="fill"
app:tabMaxWidth="0dp"
app:tabMode="fixed" />
</android.support.design.widget.AppBarLayout>
<android.support.v4.view.ViewPager
android:id="@+id/viewPager"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
</android.support.design.widget.CoordinatorLayout>
фрагмент_1.xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<EditText
android:id="@+id/search_edit_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:hint="Enter your search"
android:imeOptions="actionSearch"
android:inputType="text" />
<android.support.v7.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/search_edit_text" />
<ProgressBar
android:id="@+id/progress_bar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:visibility="gone" />
</RelativeLayout>