2016-02-28 117 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

作品超級棒! –