gpt4 book ai didi

android - 在布局中插入首选项 XML

转载 作者:数据小太阳 更新时间:2023-10-29 02:33:58 26 4
gpt4 key购买 nike

我知道我的问题有点奇怪,但故事是这样的。我在我的应用程序中添加了一个 PreferenceFragment,我正在用 SettingsFragment 替换主布局中的一个 fragment ,但我遇到了问题,XML 内容显示在 match_parent 中,并显示在工具栏上方,我想要它在下面工具栏。

为什么会这样?因为 fragment 布局如下:

<?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"
xmlns:app="http://schemas.android.com/apk/res-auto"
tools:context="com.abohani.ramadantime.MainActivity">

<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:layout_scrollFlags="scroll|enterAlways|snap"
android:minHeight="@dimen/abc_action_bar_default_height_material"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />


<FrameLayout
android:id="@+id/fragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentBottom="true"
/>

</RelativeLayout>

我不能更改 fragment 并将其设置在工具栏下方,否则我会错过我的大部分应用程序(我添加它是出于某些原因)。

简而言之,我的问题是内容与工具栏重叠,我尝试了以下方式:

    <Preference
android:layout="@layout/space"
/>

空间布局:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<View
android:id="@+id/views"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:visibility="invisible"
/>

</RelativeLayout>

可以用,但是滚动的时候不行,内容滚动到工具栏上方。

所以,我需要一些接近“below:@id/layout”的东西。

有什么想法吗?

最佳答案

Android 开发者网站上使用的模式可以追溯到 API 10 时代。下面是一个示例,说明如何使用现代 Activity/Fragment 设计模式实现首选项 - 如果您使用主/详细流程,这也适用在平板电脑上。

pref_general.xml

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

<ListPreference
android:icon="@drawable/ic_sort_black_48dp"
android:title="@string/pref_sort_label"
android:key="@string/pref_sort_key"
android:defaultValue="@string/pref_sort_favorite"
android:entryValues="@array/pref_sort_values"
android:entries="@array/pref_sort_options" />

</PreferenceScreen>

数组.xml

<resources>

<string-array name="pref_sort_options">
<item>@string/pref_sort_label_popular</item>
<item>@string/pref_sort_label_rating</item>
<item>@string/pref_sort_label_favorite</item>
</string-array>

<string-array name="pref_sort_values">
<item>@string/pref_sort_popular</item>
<item>@string/pref_sort_rating</item>
<item>@string/pref_sort_favorite</item>
</string-array>

</resources>

strings.xml

<string name="pref_sort_label">Sort Order</string>
<string name="pref_sort_label_popular">Most Popular</string>
<string name="pref_sort_label_rating">Top Rated</string>
<string name="pref_sort_label_favorite">Favorites</string>
<string name="pref_sort_key" translatable="false">sort</string>
<string name="pref_sort_popular" translatable="false">popular</string>
<string name="pref_sort_rating" translatable="false">rating</string>
<string name="pref_sort_favorite" translatable="false">favorites</string>

activity_settings.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
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:orientation="vertical"
tools:context=".SettingsActivity"
tools:ignore="MergeRootFrame">

<include
android:id="@+id/app_bar"
layout="@layout/app_bar" />

<FrameLayout
android:id="@+id/container_settings"
android:layout_width="match_parent"
android:layout_height="match_parent"/>

</LinearLayout>

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:id="@+id/app_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/colorPrimary"
android:theme="@style/ToolbarTheme"
android:elevation="4dp"
app:titleMarginStart="32dp"
app:popupTheme="@style/PopupTheme">

</android.support.v7.widget.Toolbar>

SettingsActivity.java

import android.os.Bundle;
import android.preference.ListPreference;
import android.preference.Preference;
import android.preference.PreferenceFragment;
import android.preference.PreferenceManager;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;

public class SettingsActivity extends AppCompatActivity {

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

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

getFragmentManager().beginTransaction()
.replace(R.id.container_settings, new SettingsFragment())
.commit();
}

public static class SettingsFragment extends PreferenceFragment
implements Preference.OnPreferenceChangeListener {

public static String TAG = SettingsFragment.class.getSimpleName();

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

addPreferencesFromResource(R.xml.pref_general);
bindPreferenceSummaryToValue(findPreference(getString(R.string.pref_sort_key)));
}

private void bindPreferenceSummaryToValue(Preference preference) {
preference.setOnPreferenceChangeListener(this);

onPreferenceChange(preference,
PreferenceManager
.getDefaultSharedPreferences(preference.getContext())
.getString(preference.getKey(), ""));
}

@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
String stringValue = newValue.toString();

if (preference instanceof ListPreference) {
ListPreference listPreference = (ListPreference) preference;
int prefIndex = listPreference.findIndexOfValue(stringValue);
if (prefIndex >= 0) {
preference.setSummary(listPreference.getEntries()[prefIndex]);
}
}
else {
preference.setSummary(stringValue);
}

return true;
}
}
}

关于android - 在布局中插入首选项 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38413559/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com