在完整视图中显示首选项片段

时间:2016-10-11 15:04:19

标签: android android-fragments preferencefragment

我正在使用首选项片段并替换主xml文件的根布局的id中的片段。所以我的问题是首选项与主要活动xml元素一起显示。

我在Android应用程序中看到首选项单独打开我不确定它们是单独打开还是仅占用整个屏幕。为了打开首选项片段,我正在进行正常的片段事务(注意:我没有使用支持库,不确定这是否与我的问题有关,但仍然提到它。)

以下是问题所在, enter image description here

所以这是我的代码

sampleprefs.xml

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">

    <CheckBoxPreference
        android:defaultValue="false"
        android:title="Check box preference"
        android:key="check_box_preference_1" />
    <EditTextPreference
        android:defaultValue="Default value"
        android:selectAllOnFocus="true"
        android:singleLine="true"
        android:title="Edit text preference"
        android:key="edit_text_preference_1" />

</PreferenceScreen>

这是主要布局,

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"

    tools:context="com.random.preferenceexample.MainActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        android:id="@+id/textView" />

    <Button
        android:text="Button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"


        android:id="@+id/button" />
</LinearLayout>

这是我的主要活动代码,点击按钮时显示片段

public class MainActivity extends Activity implements View.OnClickListener {
    boolean result;
    Button button;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button = (Button)findViewById(R.id.button);
        button.setOnClickListener(this);
 }

    @Override
    public void onClick(View v) {

        FragmentManager fm = getFragmentManager();
        FragmentTransaction ft = fm.beginTransaction();
        SettingsFragment sf = new SettingsFragment();
        ft.add(R.id.activity_main,sf);
        ft.commit();
    }

这是片段类

public class SettingsFragment extends PreferenceFragment {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.sampleprefs);
    }
}

2 个答案:

答案 0 :(得分:1)

看起来问题似乎与Fragment的背景透明度有关。 Fragments默认为透明背景,因为它们只能用于绘制屏幕的一小部分,但如果您希望Fragment覆盖全屏,那么只需添加一些背景,就可以了。< / p>

此外,最好使用支持视图的根布局将FragmentTransactions放在另一个之上(例如FrameLayout)。

答案 1 :(得分:1)

在片段中添加这些:

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = super.onCreateView(inflater, container, savedInstanceState);
        view.setBackgroundColor(getResources().getColor(android.R.color.white));
        return view;
    }

Here is the working example