2016-02-28 119 views
5

作为标题,我的PreferenceFragment与我的工具栏重叠。我已经尝试了不同的解决方案,但问题仍然存在。希望在任何帮助。这是我的代码。PreferenceFragment重叠工具栏

活动:

import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 

public class MyActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_settings); 

     Toolbar toolbar = (Toolbar) findViewById(R.id.app_bar); 
     setSupportActionBar(toolbar); 

     // Display the fragment as the main content 
     getFragmentManager().beginTransaction().replace(android.R.id.content, new SettingsFragment()).commit(); 
    } 
} 

活动XML(activity_settings.xml):

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
tools:context="com.mypackage.MyActivity"> 

    <include 
     layout="@layout/app_bar" /> 

    <FrameLayout 
     android:id="@+id/pref_content" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_below="@id/app_bar"/> 

</RelativeLayout> 

片段(SettingsFragment.java):

import android.preference.PreferenceFragment; 
import android.os.Bundle; 

public class SettingsFragment extends PreferenceFragment { 

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

     // Load the preferences from an XML resource 
     addPreferencesFromResource(R.xml.pref_settings); 
    } 

} 

片段XML(pref_settings.xml):

<?xml version="1.0" encoding="utf-8"?> 

<PreferenceScreen 
xmlns:android="http://schemas.android.com/apk/res/android"> 

    <CheckBoxPreference 
     android:key="pref_checkbox" 
     android:title="Title" 
     android:summary="Summary" 
     android:defaultValue="false"/> 

</PreferenceScreen> 

工具栏(app_bar.xml):

<?xml version="1.0" encoding="utf-8"?> 

<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:id="@+id/app_bar" 
android:background="@color/primaryColor" 
android:elevation="3dp" 
app:theme="@style/ThemeOverlay.AppCompat.Dark" /> 

回答

14

改变这一点:

getFragmentManager().beginTransaction().replace(android.R.id.content, new SettingsFragment()).commit(); 

到:

getFragmentManager().beginTransaction().replace(R.id.pref_content, new SettingsFragment()).commit(); 
0

我终于解决了这个问题也是由Activity XML这个替代:

<include 
    layout="@layout/app_bar" /> 

一个新的工具栏:

<android.support.v7.widget.Toolbar 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:id="@+id/app_bar_settings" 
    android:background="@color/primaryColor" 
    android:elevation="3dp" 
    android:theme="@style/ThemeOverlay.AppCompat.Dark" /> 
3

我也面临类似的问题。我已经通过向onCreateView()方法中的视图添加填充来解决此问题。 article也帮我解决了我的问题。

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View view = super.onCreateView(inflater, container, savedInstanceState); 
    // calculate margins 
    int horizontalMargin = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 2, getResources().getDisplayMetrics()); 
    int verticalMargin = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 2, getResources().getDisplayMetrics()); 
    int topMargin = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, (int) getResources().getDimension(R.dimen.activity_vertical_margin) + 30, getResources().getDisplayMetrics()); 

    view.setPadding(horizontalMargin, topMargin, horizontalMargin, verticalMargin); 
    return view; 
} 
+0

作品超级棒! –