2017-01-25 10 views
0

제 문제는 내 PreferenceFragment가 내 도구 모음과 겹치는 것입니다. 프래그먼트가 제공하는 레이아웃 활동이 없으므로 다른 곳에서 본 솔루션을 적용 할 수 없습니다. pref_header.xml을 건너 뛰고 삭제하여 지금까지이 작업을 수행했으며 툴바를 제외한 모든 작업이 작동합니다.PreferenceFragment가 PreferencesActivity의 도구 모음과 겹칩니다.

PreferenceActivity.xml

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    getFragmentManager().beginTransaction() 
      .replace(android.R.id.content, new GeneralPreferenceFragment()) 
      .commit(); 

}@TargetApi(Build.VERSION_CODES.HONEYCOMB) 
public static class GeneralPreferenceFragment extends PreferenceFragment { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     addPreferencesFromResource(R.xml.pref_general); 
     setHasOptionsMenu(true); 

     // Bind the summaries of EditText/List/Dialog/Ringtone preferences 
     // to their values. When their values change, their summaries are 
     // updated to reflect the new value, per the Android Design 
     // guidelines. 
     bindPreferenceSummaryToValue(findPreference("bredd")); 
     bindPreferenceSummaryToValue(findPreference("höjd")); 
     bindPreferenceSummaryToValue(findPreference("vecka")); 
     bindPreferenceSummaryToValue(findPreference("klass")); 


    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     int id = item.getItemId(); 
     if (id == android.R.id.home) { 
      startActivity(new Intent(getActivity(), PreferencesActivity.class)); 
      return true; 
     } 
     return super.onOptionsItemSelected(item); 
    } 
} 
@Override 
protected void onPostCreate(Bundle savedInstanceState) { 
    super.onPostCreate(savedInstanceState); 
    Toolbar bar; 

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { 
     LinearLayout root = (LinearLayout) findViewById(android.R.id.list).getParent().getParent().getParent(); 
     bar = (Toolbar) LayoutInflater.from(this).inflate(R.layout.settings_toolbar, root, false); 
     root.addView(bar, 0); // insert at top 
    } else { 
     ViewGroup root = (ViewGroup) findViewById(android.R.id.content); 
     ListView content = (ListView) root.getChildAt(0); 

     root.removeAllViews(); 

     bar = (Toolbar) LayoutInflater.from(this).inflate(R.layout.settings_toolbar, root, false); 


     int height; 
     TypedValue tv = new TypedValue(); 
     if (getTheme().resolveAttribute(R.attr.actionBarSize, tv, true)) { 
      height = TypedValue.complexToDimensionPixelSize(tv.data, getResources().getDisplayMetrics()); 
     } else { 
      height = bar.getHeight(); 
     } 

     content.setPadding(0, height, 0, 0); 

     root.addView(content); 
     root.addView(bar); 
    } 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 

} 

settings_toolbar.xml

<android.support.v7.widget.Toolbar 
xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
android:id="@+id/toolbar" 
app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:minHeight="?attr/actionBarSize" 
app:navigationContentDescription="@string/abc_action_bar_up_description" 
android:background="?attr/colorPrimary" 
app:navigationIcon="?attr/homeAsUpIndicator" 
app:title="Settings" 
android:elevation="4dp"/> 

가 아니기 때문에 나는 .replace (R.id.whateverlayoutthefragmentcomesfrom) 해결의 알고 있지만, 레이아웃 파일에 바인딩 된, 나는 무엇을 해야할지 모르겠다.

편집 : getListView(). setPadding (0, 50, 0, 0); 비슷한 라인들이 컴파일되지만 실제적인 효과는 전혀 없습니다.

편집 2 : 솔루션 이 스레드에 따라 해결 : link

답변

0

당신은 더 아래로 setPadding와

preferenceFragment/활동의 "목록"다음 코드를 사용해보십시오 내장 설정해야합니다 :

 //Put this line in onCreate 
    getListView().setPadding(0, (int) getTypedValueInDP(50), 0, 0); 

    private float getTypedValueInDP(float value) { 
    return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, value, getResources().getDisplayMetrics()); 
} 
+0

getTypedValueInDP에 'INT'. 또한 나는 상황의 장소에 넣어 무엇을 생각입니까? 멍청한 놈 질문 죄송합니다, 내가 필요 "잘못된 두번째 인수 유형. 찾을 '부동' 초보자 : –

+0

@ MartinR.L. 방금 내 대답을 편집했습니다. 지금 시도해보십시오. 만약 getResources(); getActivity()로 시도해보십시오. getResources(); – Muddz

+0

좋아요, 지금은 코드가 잘 컴파일되지만, 슬프게도 전혀 실제적인 효과가 없습니다./결과를주지 않기 전에 비슷한 코드를 시도했습니다. –