【问题标题】:Customizing preference headers layout自定义首选项标题布局
【发布时间】:2016-06-28 14:09:30
【问题描述】:

我正在使用从依赖 AppCompatDelegate 的 AndroidStudio(NewActivitySettings Activity)生成的 SettingsActivity。我已成功添加工具栏并为用于显示首选项标题的列表视图设置自定义分隔符,如下所示:

@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();
}

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

【问题讨论】:

    标签: android android-appcompat android-preferences


    【解决方案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 做同样的事情(我不确定你是想要自定义标题还是自定义列表项 - 类别将是标题,而首选项是普通列表项)

    【讨论】:

      【解决方案2】:

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

      或者你可以使用这个解决方案:https://stackoverflow.com/a/5309871/6507689

      【讨论】:

        猜你喜欢
        • 2011-09-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-11
        • 2023-03-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多