4

キーボードが開いたときにフラグメントの調整を別の方法で設定しようとしましたが、現時点では良い結果が得られません。ここにコードを入力してください

目的は、2 つのフラグメントのうちの 1 つだけを再調整することです。

ここに例があります

アクティビティ

public class MainActivity extends Activity {
...
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        if (savedInstanceState == null) {
            getFragmentManager().beginTransaction()
                    .add(R.id.frame1, new PlaceholderFragment())
                    .commit();
            getFragmentManager().beginTransaction()
                    .add(R.id.frame2, new PlaceholderFragment1())
                    .commit();
        }
    }
...

フラグメント:

public static class PlaceholderFragment extends Fragment {

    public PlaceholderFragment() {
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
     //   Context contextThemeWrapper = new ContextThemeWrapper(getActivity(), R.style.noresize);
     //   LayoutInflater localInflater = inflater.cloneInContext(contextThemeWrapper);


        getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING);
        return inflater.inflate(R.layout.fragment_main, container, false);

    }
}

public static class PlaceholderFragment1 extends Fragment {

    public PlaceholderFragment1() {

    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
        View rootView = inflater.inflate(R.layout.fragment_main_2, container, false);
        return rootView;
    }
} 

アクティビティのメイン レイアウト:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity"
    tools:ignore="MergeRootFrame"
    android:orientation="horizontal"
    >
<FrameLayout
        android:id="@+id/frame1"
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="match_parent">
<FrameLayout
        android:id="@+id/frame2"
        android:background="#30000000"
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="match_parent">

</LinearLayout>

アクティビティで SoftInputMode を 2 回再定義したことがわかりました。これは成功する可能性が低いです。それで、そのfragment.getWindows.setSoftInputMode(...

私の英語でごめんなさい...

4

1 に答える 1

1

両方のフラグメントが同時に画面に表示されていますか? その場合、設定はウィンドウ全体にのみ適用されるため、どのフラグメントがソフト入力を開いたかによって異なる動作をすることはできません。

一方、これらのフラグメントが一度に 1 つしか画面に表示されonCreateView()ない場合、そのメソッドはおそらくこのコードの適切な場所ではありません。Fragment メソッドonResume()onPause(). onResume()既存のソフト入力モードを保存して、必要なものに設定し、ソフト入力モードを以前のものに戻しonPause()ます。

于 2014-01-08T21:51:05.493 に答える