
рдПрдВрдбреНрд░реЙрдЗрдб рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╕реНрдХреНрд░реАрди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рдЬреЗрдЯреНрд╕ рдХрд╛ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╕реЗрдЯ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдЪреЗрдХрдмреЙрдХреНрд╕рдкреНрд░реАрдлреЗрд░реЗрдВрд╕, рдПрдбрд┐рдЯ рдЯреЗрдХреНрд╕реНрдЯ рдкреНрд░рд┐рдлрд░реЗрдВрд╕, рд▓рд┐рд╕реНрдЯрдкреНрд░реЗрдлреЗрд░реЗрдВрд╕ред рдпрджрд┐ рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдореМрдЬреВрджрд╛ рд╡рд┐рдЬреЗрдЯ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдкреВрд░рд╛ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдореМрдЬреВрджрд╛ рд▓реЛрдЧреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдЕрдХреНрд╕рд░ рдПрдХ рдРрд╕реА рд╕реНрдерд┐рддрд┐ рд╣реЛрддреА рд╣реИ рдЬрд╣рд╛рдВ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдкреВрд░реНрдгрд╛рдВрдХ рд╕реЗрдЯрд┐рдВрдЧ рдореЗрдВ рдЙрдЪрд┐рдд рд╕реАрдорд╛рдПрдВ рд╣реЛрддреА рд╣реИрдВ: рдЪрдордХ, рдорд╛рддреНрд░рд╛, рдЖрджрд┐ред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдЗрд╕реЗ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рд╡рд┐рдЬреЗрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред
рдЯреНрд░реЗрдирд┐рдВрдЧ
рдЖрдЗрдП, рд╕рдВрд╡рд╛рдж-рдЖрдзрд╛рд░ рд╡рд░реНрдЧ рдХреЛ рдЖрдзрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрддреЗ рд╣реИрдВ - рд╡рд┐рдЬреЗрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдЖрдзрд╛рд░ рд╡рд░реНрдЧ рдЬреЛ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╕реНрдХреНрд░реАрди рдореЗрдВ рджреЛ-рдкрдВрдХреНрддрд┐ рддрддреНрд╡ рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ рдФрд░ рджрдмрд╛рдП рдЬрд╛рдиреЗ рдкрд░ рдПрдХ рд╕рдВрд╡рд╛рдж рдЦреЛрд▓рддреЗ рд╣реИрдВред

рдЗрд╕ рд╡рд░реНрдЧ рдХреЛ рдмреБрд▓рд╛рдУ SeekBarPreferenceред рдЗрд╕рдХреЗ рд▓рд┐рдП рдкреИрд░рд╛рдореАрдЯрд░ рдиреНрдпреВрдирддрдо рдорд╛рди, рдЕрдзрд┐рдХрддрдо рдореВрд▓реНрдп рдФрд░ рд╡рд░реНрддрдорд╛рди рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рд╣реЛрдЧрд╛, рдФрд░ рд╡рд╣ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХреБрдВрдЬреА рджреНрд╡рд╛рд░рд╛ рд╕рдВрдмрдВрдзрд┐рдд рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╕реЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡рд░реНрддрдорд╛рди рдореВрд▓реНрдп рд▓реЗрдЧрд╛ред
рддрдм рдлрд╝рд╛рдЗрд▓
/res/xml/preferences.xml рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдорд╛рд░реНрдХрдЕрдк рдХреЗ рд╕рд╛рде рдЗрд╕ рддрд░рд╣ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ:
<?xml version="1.0" encoding="utf-8"?> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" xmlns:example="http://schemas.android.com/apk/res/com.mnm.seekbarpreference"> <com.mnm.seekbarpreference.SeekBarPreference android:key="seekBarPreference" android:title="@string/dialog_title" android:dialogTitle="@string/dialog_title" android:summary="@string/summary" android:persistent="true" android:defaultValue="20" example:minValue="10" example:maxValue="50" /> </PreferenceScreen>
рдЖрдк рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореМрдЬреВрджрд╛ рдЯреИрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдиреНрдпреВрдирддрдо рдФрд░ рдЕрдзрд┐рдХрддрдо рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП,
/res/values/attrs.xml рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рд╡рд┐рд╡рд░рдг рдЬреЛрдбрд╝реЗрдВред
<?xml version="1.0" encoding="utf-8"?> <resources> <declare-styleable name="com.mnm.seekbarpreference.SeekBarPreference"> <attr name="minValue" format="integer" /> <attr name="maxValue" format="integer" /> </declare-styleable> </resources>
<рдШреЛрд╖рд┐рдд-рд╢реИрд▓реА-рдпреЛрдЧреНрдп> рдЯреИрдЧ рдХреА рдирд╛рдо рд╡рд┐рд╢реЗрд╖рддрд╛ рдореЗрдВ рд╣рдорд╛рд░реЗ рд╡рд┐рдЬреЗрдЯ рдХрд╛ рдпреЛрдЧреНрдп рд╡рд░реНрдЧ рдирд╛рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдПрдХ рд╣реА рдирд╛рдо, рдХреЗрд╡рд▓ рдПрдХ рдЕрдзрд┐рдХ рдкреВрд░реНрдг рдкреНрд░рд╛рд░реВрдк рдореЗрдВ (
schemas.android.com/apk/res/qualified_class_name ) рдХреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рдирд╛рдорд╕реНрдерд╛рди (рдКрдкрд░ рджреЗрдЦреЗрдВ) рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЗрдЯрд┐рдВрдЧ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдорд╛рд░реНрдХрдЕрдк рдореЗрдВ рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
Xml рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдЕрдВрддрд┐рдо рдЪрд░рдг рд╕рдВрд╡рд╛рдж рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╛рд░реНрдХрдЕрдк рдмрдирд╛рдирд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╡рд┐рдЬреЗрдЯ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдорд╛рд░реНрдХрдЕрдк рдХреЛрдб рдЕрд╕рд╛рдорд╛рдиреНрдп рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рдмрд┐рдирд╛ рдЫреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдореЗрдВ рдиреНрдпреВрдирддрдо рдореВрд▓реНрдп, рдЕрдзрд┐рдХрддрдо рдореВрд▓реНрдп, рд╡рд░реНрддрдорд╛рди рдореВрд▓реНрдп рдФрд░, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╕реАрдХрдмрд╛рд░ рдХреЗ рд▓рд┐рдП рдПрдХ TextView рд╢рд╛рдорд┐рд▓ рд╣реИред
рдЕрдм рдЖрдк SeekBarPreference рд╡рд░реНрдЧ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рдЬрд╛рд░реА рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВред
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдорд╛рдиреЛрдВ рдХреЛ рдкрдврд╝рдирд╛ рд╣реЛрдЧрд╛:
mMinValue = attrs.getAttributeIntValue(PREFERENCE_NS, ATTR_MIN_VALUE, DEFAULT_MIN_VALUE); mMaxValue = attrs.getAttributeIntValue(PREFERENCE_NS, ATTR_MAX_VALUE, DEFAULT_MAX_VALUE); mDefaultValue = attrs.getAttributeIntValue(ANDROID_NS, ATTR_DEFAULT_VALUE, DEFAULT_CURRENT_VALUE);
рдЬрд╣рд╛рдВ рд╕реНрдерд┐рд░рд╛рдВрдХ рдиреНрдпреВрдирддрдо, рдЕрдзрд┐рдХрддрдо рдФрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рдиреЛрдВ рдХреЗ рдирд╛рдорд╕реНрдерд╛рдиреЛрдВ, рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдФрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рдиреЛрдВ рдХреЗ рдирд╛рдо рд╣реИрдВ (рдпрджрд┐ рд╡реЗ рдорд╛рд░реНрдХрдЕрдк рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рд╣реИрдВ):
private static final String PREFERENCE_NS = "http://schemas.android.com/apk/res/com.mnm.seekbarpreference"; private static final String ANDROID_NS = "http://schemas.android.com/apk/res/android"; private static final String ATTR_DEFAULT_VALUE = "defaultValue"; private static final String ATTR_MIN_VALUE = "minValue"; private static final String ATTR_MAX_VALUE = "maxValue";
рд╕рдВрд╡рд╛рдж рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо onCreateDialogView рд╡рд┐рдзрд┐ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ:
@Override protected View onCreateDialogView() {
рдорд╛рди рд╡рд┐рдЬреЗрдЯ рдХреЗ рд▓рд┐рдП
рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХреБрдВрдЬреА рджреНрд╡рд╛рд░рд╛ рдкрдврд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рд╕реАрдХрдмрд╛рд░ рдХреА рд╕реНрдерд╛рдкрдирд╛ рдХрд░рддреЗ рд╕рдордп, рдЖрдкрдХреЛ рдпрд╣ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП рдиреНрдпреВрдирддрдо рдореВрд▓реНрдп рд╣рдореЗрд╢рд╛ 0 рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдиреНрдпреВрдирддрдо рдиреЙрдирдЬрд░реЛ рд╣реИ рддреЛ рдЖрдкрдХреЛ рдЗрд╕реЗ рдШрдЯрд╛рдирд╛ рд╣реЛрдЧрд╛ред рд╡реИрд╕реЗ, рдпрд╣ рдХреЛрдб рдХреЗрд╡рд▓ рдЧреИрд░-рдирдХрд╛рд░рд╛рддреНрдордХ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдорд╛рдиреНрдп рд╣реИ, рд╕рд╛рде рд╣реА рдЬрдм рдЕрдзрд┐рдХрддрдо рдиреНрдпреВрдирддрдо рд╕реЗ рдЕрдзрд┐рдХ рд╣реИред
рдЙрд╕рдХреЗ рдмрд╛рдж, рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕реНрд▓рд╛рдЗрдбрд░ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡рд░реНрддрдорд╛рди рдореВрд▓реНрдп рдХрд╛ рдкрд╛рда рдирд╣реАрдВ рдмрджрд▓реЗрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред
рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо OnSeekBarChangeListener рдХрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ SeekBarPreference рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдореЗрдВ,
mSeekBar.setOnSeekBarChangeListener(this)
рдХрд╛ рдПрдХ рд▓рд┐рдВрдХ рдЗрд╕ рдЗрдВрдЯрд░рдлреЗрд╕ рдореЗрдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рддреАрди рд╕рдВрднрд╛рд╡рд┐рдд рддрд░реАрдХреЛрдВ рдореЗрдВ рд╕реЗ рдХреЗрд╡рд▓ рдПрдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
public void onProgressChanged(SeekBar seek, int value, boolean fromTouch) { mCurrentValue = value + mMinValue; mValueText.setText(Integer.toString(mCurrentValue)); }
рдФрд░ рдлрд┐рд░, рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдХрд┐ рд╕реАрдХрдмреЗрд░ рдХрд╛ рдиреНрдпреВрдирддрдо рдореВрд▓реНрдп рд╢реВрдиреНрдп рд╣реИ, рдЖрдкрдХреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рдЖрд╡реЗрджрди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдЕрдЧрд▓рд╛ рдХрджрдо рдкрд░рд┐рдгрд╛рдореА рдореВрд▓реНрдп рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИред рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдпрд╛ рд░рджреНрдж рдХрд░рдиреЗ рдкрд░,
onDialogClosed
рд╡рд┐рдзрд┐
onDialogClosed
, рдЬрд┐рд╕реЗ рдЖрдкрдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:
@Override protected void onDialogClosed(boolean positiveResult) { super.onDialogClosed(positiveResult); if (!positiveResult) { return; } if (shouldPersist()) { persistInt(mCurrentValue); } notifyChanged(); }
рдпрджрд┐ рд╕рдХрд╛рд░рд╛рддреНрдордХ рд╣реИ, рддреЛ рд╡рд░реНрддрдорд╛рди рдореВрд▓реНрдп рд╕рд╣реЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЪреЗрдХ
shouldPersist()
рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣
android:persistent
рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИ
android:persistent
рд╡рд░реАрдпрддрд╛рдУрдВ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ
android:persistent
рдзреНрд╡рдЬред
xml ред
рдереЛрдбрд╝реА рдЯреНрд░рд┐рдХ рдХреЗ рд▓рд┐рдП рдЖрдЦрд┐рд░реА рд▓рд╛рдЗрди рдХреА рдЬрд░реВрд░рдд рд╣реЛрддреА рд╣реИред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╡рд┐рдЬреЗрдЯ рдХреА рджреВрд╕рд░реА рдкрдВрдХреНрддрд┐ (
рд╕рд╛рд░рд╛рдВрд╢ ) рдЧрддрд┐рд╢реАрд▓ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдк рдЗрд╕рдореЗрдВ рд╡рд░реНрддрдорд╛рди рдореВрд▓реНрдп рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓рд╛рдЗрдиреЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
@Override public CharSequence getSummary() { String summary = super.getSummary().toString(); int value = getPersistedInt(mDefaultValue); return String.format(summary, value); }
рдпрд╣рд╛рдВ,
рд╕рд╛рд░рд╛рдВрд╢ рдХреЛ рдХреНрд╡реЗрд░реА рдХрд░рддреЗ рд╕рдордп, рдореВрд▓ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╡рд░реНрддрдорд╛рди рдореВрд▓реНрдп рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЬрдм рдЖрдк рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╕реНрдХреНрд░реАрди рдЦреЛрд▓рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдореВрд▓реНрдп рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рдмрд╛рдж рдЗрд╕ рдХреЛрдб рдХреЛ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ
notifyChanged()
рдХреЛ рдХреЙрд▓
notifyChanged()
ред
рдкрд░рд┐рдгрд╛рдо
рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╡рд┐рдЬреЗрдЯ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреА рдПрдХ рд╡рд┐рд╕реНрддреГрдд рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИ рдФрд░ рдореМрдЬреВрджрд╛ рд╡рд┐рдЧреЗрдЯреНрд╕ рдХреЛ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рдврдВрдЧ рд╕реЗ рдкреВрд░рдХ рдХрд░рддрд╛ рд╣реИред рдбрд╛рдпрдирд╛рдорд┐рдХ рд▓рд╛рдЗрди
рд╕рд╛рд░рд╛рдВрд╢ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдиреНрдп рдкреНрд░рдХрд╛рд░ рдХреА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рд╕рдВрджрд░реНрдн
рдбреНрд░рд╛рдлреНрдЯ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рдкреБрд░рд╛рд▓реЗрдЦрд╕реАрдХрдмрд╛рд░ (рдПрди) рдХрд╛ рд╡рд┐рд╡рд░рдгрд╕рдВрд╡рд╛рдж рдХрд╛ рд╡рд┐рд╡рд░рдг (рдПрди)