7

次のレイアウト ファイルに示すように、PreferenceFragment インスタンスである 2 つのフラグメントを持つ垂直 LinearLayout を持つ ScrollView を持つアクティビティがあります。

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_height="wrap_content"
android:layout_width="match_parent"
>

<LinearLayout
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    tools:context="com.foo.app.SettingsActivity">

    <fragment
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:name="com.foo.app.SettingsFragment"
        android:id="@+id/fragment_settings"/>

    <fragment
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:name="com.foo.app.NotificationSettingsFragment"
        android:id="@+id/fragment_notification_settings"/>

</LinearLayout>

問題は、2 つのフラグメントが PreferenceCategory タイトルだけで表示され、実際のフラグメント UI の高さがゼロで表示されないことです。奇妙なことに、各フラグメントを個別にスクロールして、欠落しているフラグメント UI を表示することができます。各 Fragment が ScrollView 内にあるかのようです。

私が期待したのは、2 つのフラグメントがコンテンツをラップするようにサイズ設定され、両方のフラグメントを含む LinearLayout をスクロールする単一の垂直スライダーがあることでした。

関連する場合、2 つのフラグメントは android.preference.PreferenceFragment を拡張し、レイアウト ファイルでレイアウトを定義しません。代わりに、次のように設定 UI をロードします。

    @Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // Load the preferences from an XML resource
    addPreferencesFromResource(R.xml.pref_notification);
}

あなたの助けのためのTIA。

4

4 に答える 4

6

外側の ScrollView を削除します。私は同じ問題を抱えていましたが、それで解決しました。

私はまだドキュメントでそれを見つけていませんが、どうやら PreferenceFragment は PreferenceScreen の周りに独自の ScrollView を提供しているようです。どういうわけか、最初の要素 (カテゴリ ヘッダーなど) を表示するのに十分な大きさの wrap_content の高さにつながります。

于 2014-05-02T01:26:32.777 に答える