V7首选项具有动态高度的自定义布局?

时间:2017-11-15 21:50:38

标签: android android-layout preferencefragment

我正在为我正在建立的设置屏幕创建一些自定义偏好设置。布局相当简单,有两个文本视图和一个图像视图。我希望textviews包装,首选项视图根据里面的内容增长。暂时忽略约束我希望这个设置有一个约束布局,但最初我认为我可能在那里做错了所以在我排除故障时去了一个基本的相对布局。

我已经设置了几个不同的基本布局,但似乎可能有一个不容易被覆盖的最大高度?

<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content">


<TextView
    android:id="@+id/motivatingTitleTextView"
    android:layout_width="wrap_content"
    app:layout_constraintWidth_default="wrap"
    android:layout_height="wrap_content"
    android:text="@string/add_motivating_photo_title"
    android:layout_marginTop="10dp"
    android:layout_marginBottom="10dp"
    app:layout_constraintHorizontal_bias="0.0"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintTop_toTopOf="parent"/>

<TextView
    android:id="@+id/motivatingMessageTextView"
    android:layout_below="@id/motivatingTitleTextView"
    android:layout_marginBottom="10dp"
    android:layout_width="wrap_content"
    app:layout_constraintWidth_default="wrap"
    android:layout_height="wrap_content"
    android:text="@string/add_motivating_photo_message"
    app:layout_constraintHorizontal_bias="0.0"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintTop_toBottomOf="@id/motivatingTitleTextView"
    app:layout_constraintBottom_toBottomOf="parent"/>
 </RelativeLayout>

以下是设置xml

<android.support.v7.preference.PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android">

<android.support.v7.preference.PreferenceCategory
    android:title="Notifications and Access">

    <android.support.v7.preference.SwitchPreferenceCompat
        android:key="allowPushNotifications"
        android:title="Notifications"
        android:defaultValue="true" />
</android.support.v7.preference.PreferenceCategory>

<android.support.v7.preference.PreferenceCategory
    android:title="Personalization">

    <com.company.Settings.AddMotivatingPhotoPreference/>
</android.support.v7.preference.PreferenceCategory>

最后是偏好片段 公共类SettingsFragment扩展了PreferenceFragmentCompat {

public SettingsFragment()
{
    // Required empty public constructor
}

@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey)
{
    addPreferencesFromResource(R.xml.settings);
}
}

enter image description here

编辑:

所以我发现如果我在默认的Preference对象中使用布局标记,它就会正确布局。我可以使这项工作,但我希望能够创建自己的自定义类,以便我可以将其他逻辑分成它们。有没有人以前做过或有过例子?我觉得我必须错过一些简单的事情......

<android.support.v7.preference.Preference
        android:layout="@layout/preference_add_motivating_photo"/>

1 个答案:

答案 0 :(得分:0)

我不知道为什么我当时没有想到这个,但答案是创建一个像上面这样的自定义首选项,然后在xml中使用layout属性作为我的布局。很简单。