рдЗрд╕рд▓рд┐рдП, рдореИрдВрдиреЗ рдПрдХ рдЫреЛрдЯреА рд╕реА рдкреЛрд╕реНрдЯ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ (рдореИрдВ рдЗрд╕рдореЗрдВ рдПрдХ рд╢рд┐рд▓реНрдкрдХрд╛рд░ рдирд╣реАрдВ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП - рдмрд╣реБрдд рд╕рд╛рд░реЗ рдХреЛрдб, рдХреБрдЫ рд╢рдмреНрдж) рдПрдВрдбреНрд░реЙрдЗрдб 4 рдореЗрдВ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреИрд╕реЗ рдХрд░реЗрдВ (рд╢рд╛рдпрдж 3.0 рдореЗрдВ рднреА)ред рд╣рдорд╛рд░рд╛ рд▓рдХреНрд╖реНрдп:
0. рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреЗ рдмрд┐рдирд╛ рдХреЛрдб рдХреЛ рдкрдврд╝рдиреЗ рдФрд░ рд╕рдордЭрдиреЗ рдХреА рдХреНрд╖рдорддрд╛1.
рдЯреБрдХрдбрд╝реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
2.
рд╣реИрдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
3. рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдореЗрдВ рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рд╡рд┐рднрд╛рдЬрди
4. рд╕рднреА рд╕реНрдХреНрд░реАрди рд░рд┐рдЬрд╝реЙрд▓реНрдпреВрд╢рди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░реЗрдВ
5. рдПрд╕рдбреАрдХреЗ 14 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ

рдЯреБрдХрдбрд╝реЗ (рдореБрдЦреНрдп рд╕реНрдХреНрд░реАрди рдкрд░ рдореЗрдиреВ рдЖрдЗрдЯрдо)
рдЯреБрдХрдбрд╝реЗ рдХреНрдпрд╛ рд╣реИрдВ? рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдХрд░реЗрдВ?
рдЯреБрдХрдбрд╝реЗ "рдЯреИрдмрд▓реЗрдЯ рдФрд░ рдлреЛрди рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдВрдбреНрд░реЙрдЗрдб" рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИрдВ, рд╡реЗ рдЖрдкрдХреЛ рдЬрд▓реНрджреА рдФрд░ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рдврдВрдЧ рд╕реЗ рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ рдЬреЛ рдлреЛрди рдФрд░ рдЯреИрдмрд▓реЗрдЯ рджреЛрдиреЛрдВ рдкрд░ рдЕрдЪреНрдЫрд╛ рд▓рдЧреЗрдЧрд╛ред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЙрдирд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИрдВ, рдЕрдиреНрдпрдерд╛ - рдПрдХ xml рдлрд╝рд╛рдЗрд▓ рд╕реЗ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЯреБрдХрдбрд╝реЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдЬреЛ рд╡рд╛рдВрдЫрд┐рдд рдореЗрдиреВ рдЖрдЗрдЯрдо рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ рд╣рдм рдХреЛ рдЦреЛрд▓ рджреЗрдЧрд╛
src / com / achep / example / TestFragment.classpublic class TestFragment extends PreferenceFragment implements onPreferenceClickListener { private static final String KEY_HABRAHABR_LAUNCHER = "habrahabrLauncher"; private Preference mHabrahabrLauncher; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╣реЛрдо рд╕реНрдХреНрд░реАрди: рд╕рдВрд╕рд╛рдзрди
рд╣рдорд╛рд░реЗ рдореБрдЦреНрдп рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдиреВ рдХреЗ рдПрдХ xml- рдлрд╝рд╛рдЗрд▓ (рд╕рдВрд╕рд╛рдзрди) рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг, рдЬрд┐рд╕рдореЗрдВ рд╣рдорд╛рд░рд╛ рдЯреБрдХрдбрд╝рд╛ (рддреАрди рдкреНрд░рддрд┐рдпреЛрдВ рдореЗрдВ) рдФрд░ рджреЛ рд╢реНрд░реЗрдгрд┐рдпрд╛рдВ рд╣реИрдВ
xml / рдкреНрд░рд╛рдердорд┐рдХрддрд╛_рд╣реЗрдбрд░реНрд╕ред xml <?xml version="1.0" encoding="utf-8"?> <preference-headers xmlns:android="http://schemas.android.com/apk/res/android" > <header android:title="" /> <header <!-- ---> android:fragment="com.achep.example.TestFragment" android:icon="@drawable/ic_settings_test" android:title=" 1" /> <header android:title=", !" /> <header android:id="@+id/header_test" // android:fragment="com.achep.example.TestFragment" android:icon="@drawable/ic_settings_test" android:title=" 2" /> <header android:fragment="com.achep.example.TestFragment" android:icon="@drawable/ic_settings_test" android:title=" 3" /> </preference-headers>
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдкреЙрдЗрдВрдЯреНрд╕ рд╢реНрд░реЗрдгрд┐рдпрд╛рдБ рдХреЗ рдкреНрд░рдХрд╛рд░ рдореЗрдВ рднрд┐рдиреНрди рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ, рдЬреЛ рдХрд┐, рдереЛрдбрд╝рд╛ рдЕрдкрд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдХреНрдпрд╛ рд╣реИ, рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ (рдЖрдк рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреА рдЪреАрдЬреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: рдЖрдИрдбреА, рдЯреБрдХрдбрд╝рд╛, рдЗрд░рд╛рджрд╛, рдФрд░ рдХрдИ рдЕрдиреНрдп), рдФрд░ рдкреНрд░рдХрд╛рд░ рдирд╣реАрдВ (рдЬреИрд╕реЗ рд╡рд░реАрдпрддрд╛ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдореЗрдВ)
рдореБрдЦреНрдп рд╕реНрдХреНрд░реАрди рд╕реЗрдЯрд┐рдВрдЧреНрд╕: рдЬрд╛рд╡рд╛ рдХреЛрдб
рдпрд╣ рдХреЛрдб
рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ
рдХреЛрдб рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ, рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ GitHub рдкрд░ рд▓рд┐рдпрд╛ рдФрд░ рдЕрдкрдиреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛ред рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣рд┐рд╕реНрд╕рд╛, рдЬрд┐рд╕реЗ рдореИрдВ рдЖрдкрдХреЛ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ, рд╡рд╣ рд╣реИрдбрд░ рдПрдбреЗрдкреНрдЯрд░, рдЗрд╕рдореЗрдВ рдЕрдВрдХ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ Google рдХреА рддрд░рд╣ рд╣реА рдХрд╛рд░реНрдп
рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рд╕рд╛ рдЯреНрд░рд┐рдХ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд╣рдо рд╕рдордЭ рдирд╣реАрдВ рдкрд╛рдПрдВрдЧреЗ рдХрд┐ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рд╕реНрд╡рд┐рдЪ-рдкреЙрдЗрдВрдЯ рдХреА рд╡реНрдпрд╡рд╕реНрдерд╛ рдХреИрд╕реЗ рдХреА рдЬрд╛рддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдмрд╣реБрдд рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реИред
src / com / achep / example / Settings.class public class Settings extends PreferenceActivity { private static final String LOG_TAG = "Settings"; private static final String META_DATA_KEY_HEADER_ID = "com.achep.example.settings.TOP_LEVEL_HEADER_ID"; private static final String META_DATA_KEY_FRAGMENT_CLASS = "com.achep.example.settings.FRAGMENT_CLASS"; private static final String META_DATA_KEY_PARENT_TITLE = "com.achep.stopwatch.PARENT_FRAGMENT_TITLE"; private static final String META_DATA_KEY_PARENT_FRAGMENT_CLASS = "com.achep.example.settings.PARENT_FRAGMENT_CLASS"; private static final String SAVE_KEY_CURRENT_HEADER = "com.achep.example.settings.CURRENT_HEADER"; private static final String SAVE_KEY_PARENT_HEADER = "com.achep.example.settings.PARENT_HEADER"; private String mFragmentClass; private int mTopLevelHeaderId; private Header mFirstHeader; private Header mCurrentHeader; private Header mParentHeader; private boolean mInLocalHeaderSwitch; protected HashMap<Integer, Integer> mHeaderIndexMap = new HashMap<Integer, Integer>(); private List<Header> mHeaders; @Override protected void onCreate(Bundle savedInstanceState) { getMetaData(); mInLocalHeaderSwitch = true; super.onCreate(savedInstanceState); mInLocalHeaderSwitch = false; if (!onIsHidingHeaders() && onIsMultiPane()) { highlightHeader(mTopLevelHeaderId); }
рд╕рдмрд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╕реЗрдЯрд┐рдВрдЧ рд╡рд░реНрдЧ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ (рдпрд╣ рдХреЗрд╡рд▓ "рдмреИрдХ" рдмрдЯрди рдореЗрдВ рднрд┐рдиреНрди рд╣реЛрддрд╛ рд╣реИ) рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдиреЙрди-рдЯреИрдмрд▓реЗрдЯ рдбрд┐рд╡рд╛рдЗрд╕ рдореЗрдВ рдореЗрдиреВ рдЖрдЗрдЯрдо рдХреЗ рдмреАрдЪ рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
src / com / achep / example / SubSettings.class public class SubSettings extends Settings {
рдореБрдЦреНрдп рд╕реНрдХреНрд░реАрди рд╕реЗрдЯрд┐рдВрдЧреНрд╕: рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЖрдЗрдЯрдо рдХрд╛ рд▓реЗрдЖрдЙрдЯ
рдХреЗрд╡рд▓ рдЖрдЗрдЯрдо рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВ рдЕрдкрдиреЗ рд▓реЗрдЖрдЙрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рдмрд┐рд▓реНрд▓реА рдореЗрдВ рдореИрдВрдиреЗ рд╡рд╣ рд╕рдм рдХреБрдЫ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬреЛ рдореИрдВрдиреЗ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдФрд░ рдХреЗрд╡рд▓ рд╢реАрд░реНрд╖рдХ рдФрд░ рдЖрдЗрдХрди рдХреЛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рд▓реЗрдЖрдЙрдЯ рдХреЗ рд╕рд╛рде рдЖрдк рдПрдХ рдЙрдкрд╢реАрд░реНрд╖рдХ рдирд╣реАрдВ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд╕рд╛рде (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП) рдЖрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
рд▓реЗрдЖрдЙрдЯ / рд╡рд░реАрдпрддрд╛_рд╣реЗрдбрд░_рдЗрдЯреЗрдоред xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="?android:attr/activatedBackgroundIndicator" android:gravity="center_vertical" android:minHeight="48.0dip" android:paddingRight="?android:scrollbarSize" > <ImageView android:id="@android:id/icon" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_marginLeft="6.0dip" android:layout_marginRight="6.0dip" /> <TextView android:id="@android:id/title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="6.0dip" android:layout_marginLeft="2.0dip" android:layout_marginRight="6.0dip" android:layout_marginTop="6.0dip" android:ellipsize="marquee" android:fadingEdge="horizontal" android:singleLine="true" android:textAppearance="?android:textAppearanceMedium" /> </LinearLayout>
Android рдореИрдиреАрдлреЗрд╕реНрдЯ
рдФрд░ рдЕрдВрддрд┐рдо рд╕реНрдкрд░реНрд╢ - рдкреНрд░рдХрдЯ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдбреЗрдЯрд╛ рдЬреЛрдбрд╝реЗрдВ
AndroidManifest.xml <activity android:name=".Settings" android:hardwareAccelerated="true" android:launchMode="singleTask" android:taskAffinity="com.achep.example" /> <activity android:name=".SubSettings" android:parentActivityName="Settings" />
рдмреЛрдирд╕: рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рддреБрд░рдВрдд рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЖрдЗрдЯрдо рд▓реЙрдиреНрдЪ рдХрд░реЗрдВ
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдЕрдкрдирд╛ TestFragment рдЪрд▓рд╛рдПрдВрдЧреЗред
рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ
src / com / achep / example / settings.class рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрдВрдХреНрддрд┐рдпрд╛рдБ:
public static class TestFragmentActivity extends Settings { }
рдФрд░ рдореЗрдВ
AndroidManifest.xml <activity android:name=".Settings$TestFragmentActivity" android:clearTaskOnLaunch="true" android:parentActivityName="Settings" > <meta-data android:name="com.achep.example.settings.FRAGMENT_CLASS" android:value="com.achep.example.TestFragment" /> <meta-data android:name="com.achep.stopwatch.TOP_LEVEL_HEADER_ID" android:resource="@id/header_test" />
рдФрд░ рдпрд╣ рд╕рдм :) рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, Settings.class рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдЖрдкрдХреЛ Settings.estFragmentActivity.class рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА
рдкреБрдирд╢реНрдЪ: рдпрджрд┐ рдореИрдВрдиреЗ рдХреБрдЫ рдирд╣реАрдВ рдХрд╣рд╛, рддреЛ рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ - рд╡рд┐рд╖рдп рдореЗрдВ рдкреНрд░рд╢реНрди рдкреВрдЫреЗрдВред