如何设置偏好设置之间的间距

4

我是一位新的开发者。偏好设置之间的空间很大,看起来不太好看。我有一个定义好的偏好设置布局文件。如何将它们设得更紧凑些呢?非常感谢!

preferences.xml

<PreferenceCategory
  android:title="@string/title_user_profile"
  android:key = "@string/preference_key_category_usersetting"
  android:layout="@layout/preference_layout">

  <Preference android:title="@string/user_email_address"
  android:key="@string/preference_key_email"
  android:summary="@string/summary_joined_from"
  android:editable="false"
  android:clickable="false"
  android:lineSpacingExtra="-4dp"/>

  <com.ipretii.app.activity.setting.NamePreference
  android:key="@string/preference_key_username"
  android:summary="Type in your user name"
  android:lineSpacingExtra="-4dp"/>

  <com.ipretii.app.activity.setting.BirthYearPickerPreference
  android:title="Birth Year"
  android:key="@string/preference_key_birthyear"
  android:lineSpacingExtra="-4dp"/>

  </PreferenceCategory>

preference_layout.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent">

  <TextView android:id="@+android:id/title"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:textSize="@dimen/text_size_title"
  android:textColor="@color/colorPrimary"
  android:paddingLeft="16dp"
  android:paddingRight="16dp"
  android:paddingTop="16dp"/>

  <TextView android:id="@android:id/summary"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:textSize="@dimen/text_size_subheading"
  android:textColor="@color/colorSubHeadingText"
  android:paddingRight="16dp"/>

  </LinearLayout>
3个回答

3
只需要添加一个简单的Preference标签即可禁用它:
    <Preference
        android:enabled="false"
        app:title="" />

0

我认为你可以调整android:padding属性以适应你的喜好。

例如,如果你想让它们在垂直方向上更接近,你可以将android:paddingTop设置为8dp或其他数值。


是的,我想要更紧凑一些。我将paddingTop设置为更小甚至删除它,但空间仍未减少。 - Eric

0

虽然我不能声称喜欢这个解决方案,但我用以下代码解决了这个问题。我使用 DialogPreference、CheckBoxPreference 和 ListPreference 进行了测试。我没有尝试过任何具有自定义布局的首选项。

在我的 SettingsFragment 中,我创建了一个类,它包装了一个 ListAdapter,并将其所有子元素的垂直填充设置为 0:

// An Adapter that wraps another adapter, but updates all child Views to have zero vertical padding
public static class ListAdapterWrapper implements ListAdapter
{
    private ListAdapter wrappedAdapter;

    public ListAdapterWrapper(ListAdapter wrappedAdapter)
    {
        super();
        this.wrappedAdapter = wrappedAdapter;
    }

    @Override
    public android.view.View getView(int i, android.view.View view, android.view.ViewGroup viewGroup)
    {
        View newView = wrappedAdapter.getView(i, view, viewGroup);
        if (newView != null && newView instanceof LinearLayout)
        {
            LinearLayout layout = (LinearLayout)newView;

            // set the top and bottom padding to 0 for each child
            int count = layout.getChildCount();
            for(int ii=0; ii<count; ii++)
            {
                View v = layout.getChildAt(ii);
                v.setPadding(v.getPaddingLeft(), 0, v.getPaddingRight(), 0);
            }
        }

        return newView;
    }

    @Override public boolean areAllItemsEnabled() { return wrappedAdapter.areAllItemsEnabled(); }
    @Override public boolean isEnabled(int i) { return wrappedAdapter.isEnabled(i); }
    @Override public void registerDataSetObserver(android.database.DataSetObserver dataSetObserver) { wrappedAdapter.registerDataSetObserver(dataSetObserver); }
    @Override public void unregisterDataSetObserver(android.database.DataSetObserver dataSetObserver) { wrappedAdapter.unregisterDataSetObserver(dataSetObserver); }
    @Override public int getCount() { return wrappedAdapter.getCount(); }
    @Override public java.lang.Object getItem(int i) { return wrappedAdapter.getItem(i); }
    @Override public long getItemId(int i) { return wrappedAdapter.getItemId(i); }
    @Override public boolean hasStableIds() { return wrappedAdapter.hasStableIds(); }
    @Override public int getItemViewType(int i) { return wrappedAdapter.getItemViewType(i); }
    @Override public int getViewTypeCount(){ return wrappedAdapter.getViewTypeCount(); }
    @Override public boolean isEmpty() { return wrappedAdapter.isEmpty(); }
}

我用一个ListAdapterWrapper覆盖了ListView的适配器。
    @Override
    public void onActivityCreated(android.os.Bundle savedInstanceState)
    {
        super.onActivityCreated(savedInstanceState);

        ListView list = (ListView)getView().findViewById(android.R.id.list);
        if (list != null)
        {
            // Overwrite the adapter so we can decrease the padding between Settings items
            list.setAdapter(new ListAdapterWrapper(list.getAdapter()));
        }
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接