Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 自定义首选项标题布局_Android_Android Appcompat_Android Preferences - Fatal编程技术网

Android 自定义首选项标题布局

Android 自定义首选项标题布局,android,android-appcompat,android-preferences,Android,Android Appcompat,Android Preferences,我使用的是由依赖于AppCompatDelegate的AndroidStudio(新建、活动、设置活动)生成的SettingsActivity。我已成功添加工具栏,并将自定义分隔符设置到用于显示器首选项标题的listview,如下所示: @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); LinearLayout root =

我使用的是由依赖于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项目关联的填充,也不知道如何增加图标和首选项标题之间的间距。是否可以使用样式或传递自定义布局


您可以创建一个覆盖
首选项类别的自定义布局。例如:

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


当然,您也可以使用
首选项
(我不确定您是否需要自定义标题或自定义列表项-类别将是标题,首选项是普通列表项)

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

或者您可以使用此解决方案: