PreferenceFragment 与 Main Activity 的布局重叠?
PreferenceFragment overlaps the Main Activity's Layout?
我在 Whosebug 上已经一个星期了,试图找到这个 'overlap' 问题的答案。
有些人甚至不使用 setContentView()???别人坚持...
我遗漏了一些东西。
Snapshot of before and after clicking on Settings menu
设置活动:
public class SettingsActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.preferences);
getFragmentManager().beginTransaction().replace(R.id.pref_frag_id, new appPreferences()).commit();
}
public static class appPreferences extends PreferenceFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Load the preferences from an XML resource
addPreferencesFromResource(R.xml.preferences);
}
}
}
布局,preferences.xml,对于 PreferenceFragment:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
tools:context="${relativePackage}.${activityClass}"
>
<fragment
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/pref_frag_id"
android:name ="com.testng.firstapp.SettingsActivity$appPreferences"
/>
</FrameLayout>
'main' 布局,Main.xml,如果我遗漏了什么:
<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"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="${relativePackage}.${activityClass}" >
<ListView
android:id="@+id/lvToDos"
android:layout_width="206dp"
android:layout_height="380dp"
android:layout_alignParentEnd="true"
android:layout_alignParentStart="true"
android:smoothScrollbar="false"
android:layout_above="@+id/itemEntryView"
android:layout_alignParentTop="true">
</ListView>
<LinearLayout
android:id="@+id/itemEntryView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_alignParentBottom="true"
android:layout_alignParentStart="true" >
<Button
android:id="@+id/btnNewToDo"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="editToDoItem"
android:text="@string/new_item"
android:textSize="@dimen/smallTextSize" />
</LinearLayout>
</RelativeLayout>
我认为您最好使用 2 个片段,一个用于初始视图,一个用于设置视图。在主要activity XML中,应该只有一个FrameLayout。这是放置主要片段和设置片段的地方。通过在主视图中只有 1 个 FrameLayout 并在这 2 个片段之间交换,您可以保证一次只有 1 个可见。但是,我建议您使用单独的 activity 来托管您的设置片段,因为我不确定这两个视图之间是否有任何关系。
糟糕。
我的 activity 的 manifest.xml 文件的主题有误:
<style name="Theme.Holo.Light.Panel">
Theme.Holo.Light.Panel 使 window 浮动,背景透明。
我在 Whosebug 上已经一个星期了,试图找到这个 'overlap' 问题的答案。
有些人甚至不使用 setContentView()???别人坚持...
我遗漏了一些东西。
Snapshot of before and after clicking on Settings menu
设置活动:
public class SettingsActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.preferences);
getFragmentManager().beginTransaction().replace(R.id.pref_frag_id, new appPreferences()).commit();
}
public static class appPreferences extends PreferenceFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Load the preferences from an XML resource
addPreferencesFromResource(R.xml.preferences);
}
}
}
布局,preferences.xml,对于 PreferenceFragment:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
tools:context="${relativePackage}.${activityClass}"
>
<fragment
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/pref_frag_id"
android:name ="com.testng.firstapp.SettingsActivity$appPreferences"
/>
</FrameLayout>
'main' 布局,Main.xml,如果我遗漏了什么:
<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"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="${relativePackage}.${activityClass}" >
<ListView
android:id="@+id/lvToDos"
android:layout_width="206dp"
android:layout_height="380dp"
android:layout_alignParentEnd="true"
android:layout_alignParentStart="true"
android:smoothScrollbar="false"
android:layout_above="@+id/itemEntryView"
android:layout_alignParentTop="true">
</ListView>
<LinearLayout
android:id="@+id/itemEntryView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_alignParentBottom="true"
android:layout_alignParentStart="true" >
<Button
android:id="@+id/btnNewToDo"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="editToDoItem"
android:text="@string/new_item"
android:textSize="@dimen/smallTextSize" />
</LinearLayout>
</RelativeLayout>
我认为您最好使用 2 个片段,一个用于初始视图,一个用于设置视图。在主要activity XML中,应该只有一个FrameLayout。这是放置主要片段和设置片段的地方。通过在主视图中只有 1 个 FrameLayout 并在这 2 个片段之间交换,您可以保证一次只有 1 个可见。但是,我建议您使用单独的 activity 来托管您的设置片段,因为我不确定这两个视图之间是否有任何关系。
糟糕。
我的 activity 的 manifest.xml 文件的主题有误:
<style name="Theme.Holo.Light.Panel">
Theme.Holo.Light.Panel 使 window 浮动,背景透明。