自定义首选项标题布局

时间:2016-06-28 14:09:30

标签: android android-appcompat android-preferences

我正在使用依赖于AppCompatDelegate的AndroidStudio(活动设置活动)生成的SettingsActivity。我成功添加了一个工具栏,并将自定义分隔符设置为用于显示器首选项标题的listview,如下所示:

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

    LinearLayout root =
            (LinearLayout) findViewById(android.R.id.list).getParent().getParent().getParent();
    Toolbar toolbar = (Toolbar) LayoutInflater.from(this).inflate(R.layout.toolbar, root, false);
    root.addView(toolbar, 0);
    toolbar.setNavigationOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            finish();
        }
    });

    ListView listView = getListView();
    listView.setDivider(ContextCompat.getDrawable(this, R.drawable.settings_divider));
    listView.setDividerHeight(1);

    setupActionBar();
}

但是,我无法弄清楚如何增加与每个listview项相关联的填充,以及如何增加图标和首选项标题标题之间的间距。是否可以使用样式或传递自定义布局?

enter image description here

2 个答案:

答案 0 :(得分:1)

您可以创建覆盖PreferenceCategory的自定义布局。例如:

public class CustomPreferenceCategory extends PreferenceCategory {

    public CustomPreferenceCategory(Context context) {
         super(context);
    }

    public CustomPreferenceCategory(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public CustomPreferenceCategory(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    @Override
    protected View onCreateView(ViewGroup parent) {
        View view = super.onCreateView(parent);

        return view;
    }

    @Override
    public View getView(View convertView, ViewGroup parent) {
        final View view = super.getView(convertView, parent);
        view.setPadding(view.getPaddingLeft(), view.getPaddingTop()*2, view.getPaddingRight(), 10);

        TextView textView = (TextView) view.findViewById(android.R.id.title);
        textView.setGravity(Gravity.BOTTOM);

        return view;
    }
}

通过覆盖这些方法(如果你想要的话还可以设置一些填充,边距,背景颜色等......

然后使用CustomPreferenceCategory代替PreferenceCategory

当然你可以用Preference做同样的事情(我不确定你是否想要自定义标题或自定义列表项 - 类别将是标题,首选项是正常列表项)

答案 1 :(得分:0)

列表的适配器应该在getView方法中为您自己的自定义视图充气。在视图中为内容设置填充。 Much like this

或者您可以使用此解决方案:https://stackoverflow.com/a/5309871/6507689