Android: How to maximize PreferenceFragment width (or get rid of margin)?

后端 未结 8 1060
误落风尘
误落风尘 2020-11-28 12:58

\"Android

\"FragmentsBC

相关标签:
8条回答
  • 2020-11-28 13:26

    When you do the preference activity with a fragment, here is the solution that I used:

    public class T2DPreferenceActivity extends PreferenceActivity {
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getFragmentManager().beginTransaction().replace(android.R.id.content,
                new T2DPreferenceFragment()).commit();
    }
    
    public static class T2DPreferenceFragment extends PreferenceFragment {
        @Override
        public void onCreate(final Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            addPreferencesFromResource(R.xml.server_screen_preference);
        }
    
        public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
            super.onViewCreated(view, savedInstanceState);
            ListView lv = (ListView)view.findViewById(android.R.id.list);
            ViewGroup parent = (ViewGroup)lv.getParent();
            parent.setPadding(0, 100, 0, 0);
        }
    }
    

    }

    0 讨论(0)
  • 2020-11-28 13:27

    There's more elegant solution, at least for PreferenceFragmentCompat, to define the padding in a theme. Assume we have our activity set a android:theme="@style/PreferenceTheme"

       <style name="PreferenceTheme" parent="@style/Theme.AppCompat">
           <item name="preferenceTheme">@style/MyPreferenceThemeOverlay</item>
       </style>
    
       <style name="MyPreferenceThemeOverlay" parent="PreferenceThemeOverlay">
            <item name="preferenceFragmentListStyle">@style/MyPreferenceFragmentListStyle</item>
       </style>
    
       <style name="MyPreferenceFragmentListStyle" parent="@style/PreferenceFragmentList">
           <item name="android:paddingLeft">0dp</item>
           <item name="android:paddingRight">0dp</item>
       </style>
    
    0 讨论(0)
  • 2020-11-28 13:30

    Just an addition to this; the accepted answer did not work for me because the ListView itself does not have any padding set, it is set on the parent view (usually a LinearLayout). So instead, the following was necessary:

    ListView lv = (ListView) findViewById(android.R.id.list);
    ViewGroup parent = (ViewGroup)lv.getParent();
    parent.setPadding(0, 0, 0, 0);
    
    0 讨论(0)
  • 2020-11-28 13:30

    getListView().setPadding(left, top, right, bottom)

    Make sure to call it after your view has been created (not onCreate).

    Keep in mind that the int you pass in is in pixels, not dp. To convert from dp to pixels see this answer.

    0 讨论(0)
  • 2020-11-28 13:38

    This is what I do in the onResume override:

        // Fix PreferenceFragment's padding...
        int paddingSize = 0;
        if (Build.VERSION.SDK_INT < 14)
        {
            paddingSize = (int) (-32 * CLS_Gfx.scale);
        }
        else
        {
            paddingSize = (int) (-16 * CLS_Gfx.scale);
        }
    
        final View v = getView();
    
        v.setPadding(paddingSize, 0, paddingSize, 0);
    
    0 讨论(0)
  • 2020-11-28 13:39

    Finally, I found the solution to this.

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View v = super.onCreateView(inflater, container, savedInstanceState);
        if(v != null) {
            ListView lv = (ListView) v.findViewById(android.R.id.list);
            lv.setPadding(10, 10, 10, 10);
        }
        return v;
    }
    

    You can set padding by using: setPadding();

    0 讨论(0)
提交回复
热议问题