PreferenceFragment与android-support-v4的替代品
我突然停止了应用程序的开发,因为我意识到PreferenceFragments在此库中不受支持。 有没有新手android开发人员可以用来克服这个障碍的替代品?
这是我现在的主窗口
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TabHost android:id="@android:id/tabhost" android:layout_width="fill_parent" android:layout_height="fill_parent" > <LinearLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <FrameLayout android:id="@android:id/tabcontent" android:layout_width="0dp" android:layout_height="0dp" android:layout_weight="0"/> <FrameLayout android:id="@+android:id/realtabcontent" android:layout_width="fill_parent" android:layout_height="0dp" android:layout_weight="1"/> </LinearLayout> <TabWidget android:id="@android:id/tabs" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="0" /> </TabHost> </LinearLayout>
对于我的TabActivity,我正在使用我在网上find的东西。 这是一个片段:
public class TabControlActivity extends FragmentActivity implements TabHost.OnTabChangeListener { public static final int INSERT_ID = Menu.FIRST; public static TabControlActivity thisCtx; private TabHost mTabHost; private HashMap mapTabInfo = new HashMap(); private TabInfo mLastTab = null; private class TabInfo { private String tag; private Class clss; private Bundle args; private Fragment fragment; TabInfo(String tag, Class clazz, Bundle args) { this.tag = tag; this.clss = clazz; this.args = args; } } class TabFactory implements TabContentFactory { private final Context mContext; /** * @param context */ public TabFactory(Context context) { mContext = context; } /** (non-Javadoc) * @see android.widget.TabHost.TabContentFactory#createTabContent(java.lang.String) */ public View createTabContent(String tag) { View v = new View(mContext); v.setMinimumWidth(0); v.setMinimumHeight(0); return v; } } ...*snip*...
是否有任何使用android-support-v4兼容性库实现类似于preferencefragment(或preferenceActivity)的东西?
更新 – 6/11/2015
Support-v7库现在包含PreferenceFragmentCompat
。 所以使用它会是一个更好的主意。
将以下项目作为库项目添加到您的应用程序中。
https://github.com/kolavar/android-support-v4-preferencefragment
你可以保持包括你的分段事务在内的所有东西。 导入PreferenceFragment
类时,请确保正确的导入标题是用户。
import android.support.v4.preference.PreferenceFragment;
代替
import android.preference.PreferenceFragment;
我知道这是一个老问题,但是现在可以使用com.android.support:preference-v7:23.3.0
PreferenceFragmentCompat
重要更新: v7 support library
的最新版本现在具有原生PreferenceFragmentCompat 。
我正在使用这个库 ,在mavenCentral
有一个AAR
,所以如果你使用Gradle
,你可以很容易地包含它。
compile 'com.github.machinarius:preferencefragment:0.1.1'
你可以使用我自己的PreferenceFragment
。
这很简单,迄今为止我没有任何问题。 我认为你只能在单个活动中一次显示其中的一个,这应该是可以的。
首选项支持库:API 7+的首选片段,不pipe活动
一个简单的实现将包括一个PreferenceFragmentCompat,例如:
public class PreferencesFragment extends PreferenceFragmentCompat { @Override public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { addPreferencesFromResource(R.xml.preferences); } }
您还需要在主题中设置preferenceTheme:
<style name="AppTheme" parent="@style/Theme.AppCompat.Light"> <item name="preferenceTheme">@style/PreferenceThemeOverlay</item> </style>
并添加在依赖关系: http : //developer.android.com/tools/support-library/features.html
com.android.support:preference-v14:23.1.0
你可能使用真正的活动和使用片段,但我不认为这是一个好的select。 你应该使用简单的PreferenceActivity,并等待改进compat库。
您可以使用第三方库(如UnifiedPreferences)为Android的所有版本使用单个API。
您可以从PreferenceActivity扩展而来,如果您希望拥有一个ActionBar,可以使用工具栏将其添加到用于首选项的ListView上方。
这可以通过使用一个垂直的LinearLayout来完成,该LinearLayout包含工具栏和一个带有android:id =“@ android:id / list”的ListView。
如果你愿意,你可以在这里看到我的解决scheme。
Lucius说你可以使用PreferenceFragmentCompat :
public class MyPreferenceFragment extends PreferenceFragmentCompat { @Override public void onCreatePreferences(Bundle bundle, String s) { PreferenceManager.setDefaultValues(getActivity(), R.xml.preferences, false); addPreferencesFromResource(R.xml.preferences); } }
你必须在gradle中包含它的依赖:
dependencies { ... compile 'com.android.support:preference-v7:23.1.X' (wherX = 0,1,...) ... }
这样你也可以使用android.support.v4.app.FragmentTransaction和PrefernceFragment的FragmentTransaction。 但是,你可能有主题的问题。 如果是这样的话,你可以考虑这个post来解决它:
解决scheme使lib在API 7+上工作,同时在API 14+上保留材质主题