
рдкреНрд░рддреНрдпреЗрдХ рдбреЗрд╡рд▓рдкрд░ рдХреЗ рдЬреАрд╡рди рдореЗрдВ, рдПрдХ рдРрд╕рд╛ рдХреНрд╖рдг рд╣реЛрддрд╛ рд╣реИ, рдЬрдм рдЖрдк рдХрд┐рд╕реА рд╡рд┐рджреЗрд╢реА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рд╕рдорд╛рдзрд╛рди рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЗрд╕реЗ рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдпрд╣ рддрд╛рд░реНрдХрд┐рдХ рд╣реИ рдФрд░ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ "рдЕрдЪреНрдЫрд╛рдИ рдХреЗ рдирд┐рдЧрдо" рд╕реЗ рд▓реЛрдЧреЛрдВ рдХреА рджреЗрдЦрднрд╛рд▓ рдХрд░рддреЗ рд╣реБрдП рдЗрд╕ рдкрд░ рдХрд┐рд╕реА рддрд░рд╣ рдХрд╛ рдЧрд╛рдЗрдб рд▓рд┐рдЦрд╛ рдпрд╛ рдПрдХ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рд╡реАрдбрд┐рдпреЛ рдмрдирд╛рдпрд╛ рдЬрд╣рд╛рдВ рдпрд╣ рдЙрдВрдЧрд▓рд┐рдпреЛрдВ рдкрд░ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ рдХрд┐ рд╡рд╛рдВрдЫрд┐рдд рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рддрд░реАрдХреЛрдВ рдХреЛ рдХреИрд╕реЗ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПред рдЕрдХреНрд╕рд░ рдРрд╕рд╛ рд╣реА рд╣реЛрддрд╛ рд╣реИред
рд▓реЗрдХрд┐рди рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рд╣реЛрддрд╛ рд╣реИ: рдЖрдк рд╣рд░ рджреВрд╕рд░реЗ рдЖрд╡реЗрджрди рдореЗрдВ рдХрд┐рд╕реА рдЪреАрдЬ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рдФрд░ рдЬрдм рдШрд░ рдкрд░ рдЙрд╕реА рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдмрд╛рдд рдЖрддреА рд╣реИ - рддреЛ рдпрд╣ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЕрднреА рднреА рдХреЛрдИ рдЖрд╕рд╛рди рдЙрдкрд╛рдп рдирд╣реАрдВ рд╣реИрдВ ...
рдореЗрд░реЗ рд╕рд╛рде рдпрд╣ рддрдм рд╣реБрдЖ рдЬрдм рд╢реАрд░реНрд╖ рдкреИрдирд▓ рдХреЗ рдХрд╛рдЙрдВрдЯрд░ рдХреЗ рд╕рд╛рде рдЖрдЗрдХрди рдЬреЛрдбрд╝рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рдЧрдпрд╛ред рдореБрдЭреЗ рдмрд╣реБрдд рдЖрд╢реНрдЪрд░реНрдп рд╣реБрдЖ рдЬрдм рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдкрд░рд┐рдЪрд┐рдд рдФрд░ рдорд╛рдВрдЧ рд╡рд╛рд▓реЗ рдпреВрдЖрдИ рддрддреНрд╡ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рд╕рд░рд▓ рдЙрдкрд╛рдп рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ, рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗред рдФрд░ рдореИрдВрдиреЗ рд╡рд┐рд╢реНрд╡рд╡реНрдпрд╛рдкреА рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рдЬреНрдЮрд╛рди рдХреА рдУрд░ рдореБрдбрд╝рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдКрдкрд░реА рдЯреВрд▓рдмрд╛рд░ рдореЗрдВ рдПрдХ рдХрд╛рдЙрдВрдЯрд░ рдХреЗ рд╕рд╛рде рдПрдХ рдЖрдЗрдХрди рд░рдЦрдиреЗ рдХрд╛ рдореБрджреНрджрд╛, рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдирд┐рдХрд▓рд╛, рдХрд╛рдлреА рдЪрд┐рдВрддрд┐рдд рдерд╛ред рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдХреБрдЫ рд╕рдордп рдмрд┐рддрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╕рдорд╛рдзрд╛рди рдорд┐рд▓реЗред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╡реЗ рд╕рднреА рд╢реНрд░рдорд┐рдХ рд╣реИрдВ рдФрд░ рдЬреАрд╡рди рдХрд╛ рдЕрдзрд┐рдХрд╛рд░ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореЗрд░реЗ рд╢реЛрдз рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рд╡рд┐рднрд┐рдиреНрди рддрд░реАрдХреЛрдВ рд╕реЗ рдПрдВрдбреНрд░реЙрдЗрдб рдореЗрдВ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рдПред
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдХрд╛рдЙрдВрдЯрд░ рдЖрдЗрдХрди рдХреЗ рдХрдИ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛ред рдпрд╣рд╛рдБ 4 рдЙрджрд╛рд╣рд░рдг рд╣реИрдВред рдпрджрд┐ рдЖрдк рдереЛрдбрд╝рд╛ рдФрд░ рд╡рд┐рд╕реНрддреГрдд рд░реВрдк рд╕реЗ рд╕реЛрдЪрддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рд▓рдЧрднрдЧ рдХрд┐рд╕реА рднреА рдХрд╕реНрдЯрдо рддрддреНрд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ, рдЬрд┐рд╕реЗ рд╣рдо рдКрдкрд░реА рдЯреВрд▓рдмрд╛рд░ рдореЗрдВ рд░рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рддреЛ рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред
рдирд┐рд░реНрдгрдп рдПрдХ
рд╕рдВрдХрд▓реНрдкрдирд╛
рд╣рд░ рдмрд╛рд░ рдЖрдкрдХреЛ рдЖрдЗрдХрди рдкрд░ рдХрд╛рдЙрдВрдЯрд░ рдХреЛ рдЦреАрдВрдЪрдиреЗ рдпрд╛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЖрдкрдХреЛ рдорд╛рд░реНрдХрдЕрдк рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЖрдзрд╛рд░ рдкрд░
Drawable
рдмрдирд╛рдиреЗ рдФрд░ рдЗрд╕реЗ рдЖрдЗрдХрди рдХреЗ рд░реВрдк рдореЗрдВ рдЯреВрд▓рдмрд╛рд░ рдкрд░ рдЦреАрдВрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
res/layouts
рдореЗрдВ рдПрдХ
badge_with_counter_icon
рдорд╛рд░реНрдХрдЕрдк рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="@dimen/menu_item_icon_size" > <ImageView android:id="@+id/icon_badge" android:layout_width="@dimen/menu_item_icon_size" android:layout_height="@dimen/menu_item_icon_size" android:scaleType="fitXY" android:src="@drawable/icon" android:layout_alignParentStart="true"/> <TextView android:id="@+id/counter" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignStart="@id/icon_badge" android:layout_alignTop="@+id/icon_badge" android:layout_gravity="center" android:layout_marginStart="@dimen/counter_left_margin" android:background="@drawable/counter_background" android:gravity="center" android:paddingLeft="@dimen/counter_text_horizontal_padding" android:paddingRight="@dimen/counter_text_horizontal_padding" android:text="99" android:textAppearance="@style/CounterText" /> </RelativeLayout>
рдпрд╣рд╛рдВ рд╣рдо рдХрд╛рдЙрдВрдЯрд░ рдХреЛ рдЖрдЗрдХрди рдХреЗ рдмрд╛рдПрдВ рдХрд┐рдирд╛рд░реЗ рд╕реЗ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЗрдВрдбреЗрдВрдЯ рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрддреЗ рд╣реИрдВ: рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рддрд╛рдХрд┐ рдЬрдм рдкрд╛рда рдХреА рд▓рдВрдмрд╛рдИ рдмрдврд╝ рдЬрд╛рдП, рдХрд╛рдЙрдВрдЯрд░ рдХрд╛ рдореБрдЦреНрдп рдЖрдЗрдХрди рдУрд╡рд░рд▓реИрдк рди рд╣реЛ - рдпрд╣ рдмрджрд╕реВрд░рдд рд╣реИред
res/values/dimens
рдРрдб рдореЗрдВ:
<dimen name="menu_item_icon_size">24dp</dimen> <dimen name="counter_left_margin">14dp</dimen> <dimen name="counter_badge_radius">6dp</dimen> <dimen name="counter_text_size">9sp</dimen> <dimen name="counter_text_horizontal_padding">4dp</dimen>
рд╕рд╛рдордЧреНрд░реА рдбрд┐рдЬрд╛рдЗрди рдЧрд╛рдЗрдб рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЖрдЗрдХрди рдХрд╛ рдЖрдХрд╛рд░ред
res/values/colors
рдЬреЛрдбрд╝реЗрдВ:
<color name="counter_background_color">@android:color/holo_red_light</color> <color name="counter_text_color">@android:color/white</color>
res/values/styles
рдЬреЛрдбрд╝реЗрдВ:
<style name="CounterText"> <item name="android:fontFamily">sans-serif</item> <item name="android:textSize">@dimen/counter_text_size</item> <item name="android:textColor">@color/counter_text_color</item> <item name="android:textStyle">normal</item> </style>
res/drawable/
resource рдореЗрдВ
res/drawable/
рдмрдирд╛рдПрдБ:
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <solid android:color="@color/counter_background_color"/> <corners android:radius="@dimen/counter_badge_radius"/> </shape>
рдПрдХ рдЖрдЗрдХрди рдХреЗ рд░реВрдк рдореЗрдВ, рдЕрдкрдиреА рддрд╕реНрд╡реАрд░ рд▓реЗрдВ, рдЗрд╕реЗ
icon
рдХрд╣реЗрдВ рдФрд░ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдореЗрдВ рдбрд╛рд▓реЗрдВред
res/menu
menu_main.xml
рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ:
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <item android:id="@+id/action_counter_1" android:icon="@drawable/icon" android:title="icon" app:showAsAction="ifRoom"/> </menu>
рдПрдХ рд╡рд░реНрдЧ рдмрдирд╛рдПрдВ рдЬреЛ рдорд╛рд░реНрдХрдЕрдк рдХреЛ
Drawable
рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░реЗ:
LayoutToDrawableConverter.java
package com.example.counters.counters; import android.content.Context; import android.graphics.Bitmap; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.view.LayoutInflater; import android.view.View; import android.widget.ImageView; import android.widget.TextView; public class LayoutToDrawableConverter { public static Drawable convertToImage(Context context, int count, int drawableId) { LayoutInflater inflater = LayoutInflater.from(context); View view = inflater.inflate(R.layout.badge_with_counter_icon, null); ((ImageView) view.findViewById(R.id.icon_badge)).setImageResource(drawableId); TextView textView = view.findViewById(R.id.counter); if (count == 0) { textView.setVisibility(View.GONE); } else { textView.setText(String.valueOf(count)); } view.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED), View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED)); view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight()); view.setDrawingCacheEnabled(true); view.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_HIGH); Bitmap bitmap = Bitmap.createBitmap(view.getDrawingCache()); view.setDrawingCacheEnabled(false); return new BitmapDrawable(context.getResources(), bitmap); } }
рдЕрдЧрд▓рд╛, рд╣рдореЗрдВ рдЬреЛ
Activity
рдЪрд╛рд╣рд┐рдП, рдЙрд╕рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ:
private int mCounterValue1 = 0; @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_main, menu); MenuItem menuItem = menu.findItem(R.id.action_with_counter_1); menuItem.setIcon(LayoutToDrawableConverter.convertToImage(this, mCounterValue1, R.drawable.icon)); return true; } @Override public boolean onOptionsItemSelected(final MenuItem item) { switch (item.getItemId()) { case R.id.action_counter_1: updateFirstCounter(mCounterValue1 + 1); return true; default: return super.onOptionsItemSelected(item); } } private void updateFirstCounter(int newCounterValue){ mCountrerValue1 = newCounterValue; invalidateOptionsMenu(); }
рдЕрдм, рдпрджрд┐ рдХрд╛рдЙрдВрдЯрд░ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рддреЛ рд╣рдо
updateFirstCounter
рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдореВрд▓реНрдп рдХреЛ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реБрдПред рдЬрдм рдореИрдВрдиреЗ рдЖрдЗрдХрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд┐рдпрд╛ рддреЛ рдореИрдВрдиреЗ рдХрд╛рдЙрдВрдЯрд░ рд╡реИрд▓реНрдпреВ рдореЗрдВ рд╡реГрджреНрдзрд┐ рдкреЛрд╕реНрдЯ рдХреАред рдЕрдиреНрдп рдХреНрд░рд┐рдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рднреА рдореИрдВ рдРрд╕рд╛ рд╣реА рдХрд░реВрдВрдЧрд╛ред
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд░ рдзреНрдпрд╛рди рджреЗрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ: рд╣рдо рдПрдХ рдЫрд╡рд┐ рдмрдирд╛рддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рд╣рдо рддрдм рдореЗрдиреВ рдЖрдЗрдЯрдо рдХреЛ рдЦрд┐рд▓рд╛рддреЗ рд╣реИрдВ - рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рд╕рдВрдХреЗрдд рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЙрддреНрдкрдиреНрди рд╣реЛрддреЗ рд╣реИрдВ, рд╣рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
рджреВрд╕рд░рд╛ рдлреИрд╕рд▓рд╛
рд╕рдВрдХрд▓реНрдкрдирд╛
рдЗрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ, рд╣рдо
LayerList
рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдмрд╣реБрдкрд░рдд рддрддреНрд╡ рдХреЗ рдЖрдзрд╛рд░ рдкрд░
LayerList
рдЖрдЗрдХрди
LayerList
, рдЬрд┐рд╕рдореЗрдВ рд╕рд╣реА рд╕рдордп рдкрд░ рд╣рдо рдХрд╛рдЙрдВрдЯрд░ рдХреЛ рд╕реНрд╡рдпрдВ рдЦреАрдВрдЪрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рдЖрдЗрдХрди рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рд░рд╣рддрд╛ рд╣реИред
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
рдЗрд╕рдХреЗ рдмрд╛рдж, рдореИрдВ рдзреАрд░реЗ-рдзреАрд░реЗ рд╕рднреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдВрд╕рд╛рдзрди рдФрд░ рдХреЛрдб рдЬреЛрдбрд╝реВрдВрдЧрд╛ред
res/drawable/
ic_layered_counter_icon.xml
рдмрдирд╛рдПрдВ:
<?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/icon" android:gravity="center" /> <item android:id="@+id/ic_counter" android:drawable="@android:color/transparent" /> </layer-list>
res/menu/menu_main.xml
рдЬреЛрдбрд╝реЗрдВ:
<item android:id="@+id/action_counter_2" android:icon="@drawable/ic_layered_counter_icon" android:title="layered icon" app:showAsAction="ifRoom"/>
res/values/dimens
рдРрдб рдореЗрдВ:
<dimen name="counter_text_vertical_padding">2dp</dimen>
рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ
CounterDrawable.java
:
package com.example.counters.counters; import android.content.Context; import android.graphics.Canvas; import android.graphics.ColorFilter; import android.graphics.Paint; import android.graphics.PixelFormat; import android.graphics.Rect; import android.graphics.Typeface; import android.graphics.drawable.Drawable; import android.support.v4.content.ContextCompat; public class CounterDrawable extends Drawable { private Paint mBadgePaint; private Paint mTextPaint; private Rect mTxtRect = new Rect(); private String mCount = ""; private boolean mWillDraw; private Context mContext; public CounterDrawable(Context context) { mContext = context; float mTextSize = context.getResources() .getDimension(R.dimen.counter_text_size); mBadgePaint = new Paint(); mBadgePaint.setColor(ContextCompat.getColor(context.getApplicationContext(), R.color.counter_background_color)); mBadgePaint.setAntiAlias(true); mBadgePaint.setStyle(Paint.Style.FILL); mTextPaint = new Paint(); mTextPaint.setColor(ContextCompat.getColor(context.getApplicationContext(), R.color.counter_text_color)); mTextPaint.setTypeface(Typeface.DEFAULT); mTextPaint.setTextSize(mTextSize); mTextPaint.setAntiAlias(true); mTextPaint.setTextAlign(Paint.Align.CENTER); } @Override public void draw(Canvas canvas) { if (!mWillDraw) { return; } float radius = mContext.getResources() .getDimension(R.dimen.counter_badge_radius); float counterLeftMargin = mContext.getResources() .getDimension(R.dimen.counter_left_margin); float horizontalPadding = mContext.getResources() .getDimension(R.dimen.counter_text_horizontal_padding); float verticalPadding = mContext.getResources() .getDimension(R.dimen.counter_text_vertical_padding); mTextPaint.getTextBounds(mCount, 0, mCount.length(), mTxtRect); float textHeight = mTxtRect.bottom - mTxtRect.top; float textWidth = mTxtRect.right - mTxtRect.left; float badgeWidth = Math.max(textWidth + 2 * horizontalPadding, 2 * radius); float badgeHeight = Math.max(textHeight + 2 * verticalPadding, 2 * radius); canvas.drawCircle(counterLeftMargin + radius, radius, radius, mBadgePaint); canvas.drawCircle(counterLeftMargin + radius, badgeHeight - radius, radius, mBadgePaint); canvas.drawCircle(counterLeftMargin + badgeWidth - radius, badgeHeight - radius, radius, mBadgePaint); canvas.drawCircle(counterLeftMargin + badgeWidth - radius, radius, radius, mBadgePaint); canvas.drawRect(counterLeftMargin + radius, 0, counterLeftMargin + badgeWidth - radius, badgeHeight, mBadgePaint); canvas.drawRect(counterLeftMargin, radius, counterLeftMargin + badgeWidth, badgeHeight - radius, mBadgePaint);
рдпрд╣ рд╡рд░реНрдЧ рд╣рдорд╛рд░реЗ рдЖрдЗрдХрди рдХреЗ рдКрдкрд░реА рджрд╛рдПрдВ рдХреЛрдиреЗ рдореЗрдВ рдХрд╛рдЙрдВрдЯрд░ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░реЗрдЧрд╛ред рдПрдХ рдХрд╛рдЙрдВрдЯрд░ рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рдмрдирд╛рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рд╣реИ рдХрд┐ рдмрд╕
canvas.drawRoundRect
рдХреЛ
canvas.drawRoundRect
рдПрдХ рдЧреЛрд▓рд╛рдХрд╛рд░ рдЖрдпрдд
canvas.drawRoundRect
ред рдпрд╣ рддрд░реАрдХрд╛ 21 рд╡реЗрдВ рд╕реЗ рдКрдкрд░ рдХреЗ рдПрдкреАрдЖрдИ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдПрдкреАрдЖрдИ рдХреЗ рдкрд┐рдЫрд▓реЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИред
рдЕрдЧрд▓рд╛, рд╣рдорд╛рд░реА
Activity
рдЬреЛрдбрд╝реЗрдВ:
private int mCounterValue2 = 0; private LayerDrawable mIcon2; private void initSecondCounter(Menu menu){ MenuItem menuItem = menu.findItem(R.id.action_counter_2); mIcon2 = (LayerDrawable) menuItem.getIcon(); updateSecondCounter(mCounterValue2); } private void updateSecondCounter(int newCounterValue) { CounterDrawable badge; Drawable reuse = mIcon2.findDrawableByLayerId(R.id.ic_counter); if (reuse != null && reuse instanceof CounterDrawable) { badge = (CounterDrawable) reuse; } else { badge = new CounterDrawable(this); } badge.setCount(String.valueOf(newCounterValue)); mIcon2.mutate(); mIcon2.setDrawableByLayerId(R.id.ic_counter, badge); }
onOptionsItemSelected
рдореЗрдВ рдХреЛрдб рдЬреЛрдбрд╝реЗрдВред рдкрд╣рд▓реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдпрд╣ рд╡рд┐рдзрд┐ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧреА:
@Override public boolean onOptionsItemSelected(final MenuItem item) { switch (item.getItemId()) { case R.id.action_counter_1: updateFirstCounter(mCounterValue1 + 1); return true; case R.id.action_counter_2: updateSecondCounter(++mCounterValue2); return true; default: return super.onOptionsItemSelected(item); } }
рдпрд╣ рд╕рдм, рджреВрд╕рд░рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рддреИрдпрд╛рд░ рд╣реИред рдкрд┐рдЫрд▓реА рдмрд╛рд░ рдХреА рддрд░рд╣, рдореИрдВрдиреЗ рдЖрдЗрдХрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ рдХрд╛рдЙрдВрдЯрд░ рдЕрдкрдбреЗрдЯ рдХреЛ рд▓рдЯрдХрд╛ рджрд┐рдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЗрд╕реЗ
updateSecondCounter
рд╡рд┐рдзрд┐ рд╕реЗ рдХрд╣реАрдВ рднреА рдХреЙрд▓ рдХрд░рдХреЗ рдЖрд░рдВрдн рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рдо рдЕрдкрдиреЗ рд╣рд╛рдереЛрдВ рд╕реЗ рдХреИрдирд╡рд╕ рдкрд░ рдХрд╛рдЙрдВрдЯрд░ рдЦреАрдВрдЪрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрдк рдХреБрдЫ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рдЪреАрдЬрд╝реЛрдВ рдХреЗ рд╕рд╛рде рдЖ рд╕рдХрддреЗ рд╣реИрдВ - рдпрд╣ рд╕рдм рдЖрдкрдХреА рдХрд▓реНрдкрдирд╛ рдпрд╛ рдЧреНрд░рд╛рд╣рдХ рдХреА рдЗрдЪреНрдЫрд╛рдУрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред
рдирд┐рд░реНрдгрдп рддреАрди
рд╕рдВрдХрд▓реНрдкрдирд╛
рдПрдХ рдореЗрдиреВ рдЖрдЗрдЯрдо рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рдЫрд╡рд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдордирдорд╛рдирд╛ рдорд╛рд░реНрдХрдЕрдк рдХреЗ рд╕рд╛рде рдПрдХ рддрддреНрд╡ред рддрдм рд╣рдо рдЗрд╕ рддрддреНрд╡ рдХреЗ рдШрдЯрдХреЛрдВ рдХреЛ рдвреВрдВрдврддреЗ рд╣реИрдВ рдФрд░ рдЙрдирд╕реЗ рд▓рд┐рдВрдХ рдХреЛ рдмрдЪрд╛рддреЗ рд╣реИрдВред
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо
TextView
рдЖрдЗрдХрди рдФрд░
TextView
рдХрд╛рдЙрдВрдЯрд░ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдХреБрдЫ рдФрд░ рдХрд╕реНрдЯрдо рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рддрддреНрд╡ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рддреБрд░рдВрдд рддреЗрдЬ рдХрд░реЗрдВред рдпрд╣ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐
onOptionsItemSelected
рд╡рд┐рдзрд┐
onOptionsItemSelected
рдЯреВрд▓рдмрд╛рд░ рдореЗрдВ рдХрд╕реНрдЯрдо рддрддреНрд╡реЛрдВ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
рд╣рдо рдПрдХ
badge_with_counter.xml
рдорд╛рд░реНрдХрдЕрдк рдлрд╝рд╛рдЗрд▓ рдХреЛ
res/layouts
рдореЗрдВ рдмрдирд╛рддреЗ
res/layouts
:
<?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content"> <RelativeLayout android:layout_width="@dimen/menu_item_size" android:layout_height="@dimen/menu_item_size"> <ImageView android:id="@+id/icon_badge" android:layout_width="@dimen/menu_item_icon_size" android:layout_height="@dimen/menu_item_icon_size" android:layout_centerInParent="true" android:scaleType="fitXY" android:src="@drawable/icon" /> <TextView android:id="@+id/counter" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignStart="@id/icon_badge" android:layout_alignTop="@+id/icon_badge" android:layout_gravity="center" android:layout_marginStart="@dimen/counter_left_margin" android:background="@drawable/counter_background" android:gravity="center" android:paddingLeft="@dimen/counter_text_horizontal_padding" android:paddingRight="@dimen/counter_text_horizontal_padding" android:text="99" android:textAppearance="@style/CounterText" /> </RelativeLayout> </FrameLayout>
res/values/dimens
рдРрдб рдореЗрдВ:
<dimen name="menu_item_size">48dp</dimen>
res/menu/menu_main.xml
:
<item android:id="@+id/action_counter_3" app:actionLayout="@layout/badge_with_counter" android:title="existing action view" app:showAsAction="ifRoom"/>
рдЕрдЧрд▓рд╛, рд╣рдорд╛рд░реА
Activity
рдЬреЛрдбрд╝реЗрдВ:
private int mCounterValue3 = 0; private ImageView mIcon3; private TextView mCounterText3; private void initThirdCounter(Menu menu){ MenuItem counterItem = menu.findItem(R.id.action_counter_3); View counter = counterItem.getActionView(); mIcon3 = counter.findViewById(R.id.icon_badge); mCounterText3 = counter.findViewById(R.id.counter); counter.setOnClickListener(v -> onThirdCounterClick()); updateThirdCounter(mCounterValue3); } private void onThirdCounterClick(){ updateThirdCounter(++mCounterValue3); } private void updateThirdCounter(int newCounterValue) { if (mIcon3 == null || mCounterText3 == null) { return; } if (newCounterValue == 0) { mIcon3.setImageResource(R.drawable.icon); mCounterText3.setVisibility(View.GONE); } else { mIcon3.setImageResource(R.drawable.icon); mCounterText3.setVisibility(View.VISIBLE); mCounterText3.setText(String.valueOf(newCounterValue)); } }
onPrepareOptionsMenu
рдЬреЛрдбрд╝реЗрдВ:
initThirdCounter(menu);
рдЕрдм, рдкрд┐рдЫрд▓реЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП, рдпрд╣ рд╡рд┐рдзрд┐ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреА рд╣реИ:
@Override public boolean onPrepareOptionsMenu(final Menu menu) {
рд╣реЛ рдЧрдпрд╛! рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рддрддреНрд╡ рдХреЗ рд▓рд┐рдП рд╣рдордиреЗ рдорд╛рд░реНрдХрдЕрдк рд▓рд┐рдпрд╛, рдЬрд┐рд╕рдореЗрдВ рд╣рдордиреЗ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдЖрдХрд╛рд░реЛрдВ рдФрд░ рдЗрдВрдбреЗрдВрдЯреЛрдВ рдХрд╛ рд╕рдВрдХреЗрдд рджрд┐рдпрд╛ - рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕рд┐рд╕реНрдЯрдо рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред
рдирд┐рд░реНрдгрдп рдЪрд╛рд░
рд╕рдВрдХрд▓реНрдкрдирд╛
рдкрд┐рдЫрд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рдорд╛рди рд╣реА, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рд╣рдо рдХреЛрдб рд╕реЗ рд╕реАрдзреЗ рдЕрдкрдирд╛ рддрддреНрд╡ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
Activity
рдЬреЛрдбрд╝реЗрдВ:
private int mCounterValue4 = 0; private void addFourthCounter(Menu menu, Context context) { View counter = LayoutInflater.from(context) .inflate(R.layout.badge_with_counter, null); counter.setOnClickListener(v -> onFourthCounterClick()); mIcon4 = counter.findViewById(R.id.icon_badge); mCounterText4 = counter.findViewById(R.id.counter); MenuItem counterMenuItem = menu.add(context.getString(R.string.counter)); counterMenuItem.setActionView(counter); counterMenuItem.setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_ALWAYS); updateFourthCounter(mCounterValue4); } private void onFourthCounterClick(){ updateFourthCounter(++mCounterValue4); } private void updateFourthCounter(int newCounterValue) { if (mIcon4 == null || mCounterText4 == null) { return; } if (newCounterValue == 0) { mIcon4.setImageResource(R.drawable.icon); mCounterText4.setVisibility(View.GONE); } else { mIcon4.setImageResource(R.drawable.icon); mCounterText4.setVisibility(View.VISIBLE); mCounterText4.setText(String.valueOf(newCounterValue)); } }
рдЗрд╕ рд╡рд┐рдХрд▓реНрдк рдореЗрдВ, рдореЗрдиреВ рдореЗрдВ рд╣рдорд╛рд░реЗ рдЖрдЗрдЯрдо рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд╣реА
onCreateOptionsMenu
рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
рдкрд┐рдЫрд▓реЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдпрд╣ рд╡рд┐рдзрд┐ рдЕрдм рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреА рд╣реИ:
@Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_main, menu); MenuItem menuItem = menu.findItem(R.id.action_counter_1);
рд╣реЛ рдЧрдпрд╛!
рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдЕрдВрддрд┐рдо рджреЛ рд╕рдорд╛рдзрд╛рди рд╕рдмрд╕реЗ рд╕рд░рд▓ рдФрд░ рд╕рдмрд╕реЗ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рд╣реИрдВ, рдФрд░ рд╕рдмрд╕реЗ рдХрдо рднреА рд╣реИрдВ: рд╣рдо рдмрд╕ рдЙрд╕ рддрддреНрд╡ рд▓реЗрдЖрдЙрдЯ рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХреА рд╣рдореЗрдВ рдЬрд╝рд░реВрд░рдд рд╣реИ рдФрд░ рдЗрд╕реЗ рдЯреВрд▓рдмрд╛рд░ рдореЗрдВ рдЫреЛрдбрд╝ рджреЗрдВ, рдФрд░ рд╕рд╛рдордЧреНрд░реА рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ рдЬреИрд╕реЗ рдХрд┐ рдПрдХ рдирд┐рдпрдорд┐рдд рджреГрд╢реНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ред
рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ, рдореБрдЭреЗ рдХреЗрд╡рд▓ рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рд╡рд░реНрдгрди рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЗрд╕ рдкрд░ рдзреНрдпрд╛рди рдирд╣реАрдВ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП? рдЗрд╕рдХреЗ рджреЛ рдХрд╛рд░рдг рд╣реИрдВ:
- рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВ рдмрддрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдХреЗ рдХрдИ рд╕рдорд╛рдзрд╛рди рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ;
- рджреВрд╕рд░реЗ, рд╡рд┐рдЪрд╛рд░ рдХрд┐рдП рдЧрдП рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рдХрд▓реНрдк рдкрд░ рдЬреАрд╡рди рдХрд╛ рдЕрдзрд┐рдХрд╛рд░ рд╣реИред
рдпрд╛рдж рд░рдЦреЗрдВ, рдореИрдВрдиреЗ рд▓рд┐рдЦрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЗрди рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреЛ рди рдХреЗрд╡рд▓ рдПрдХ рдХрд╛рдЙрдВрдЯрд░ рдХреЗ рд╕рд╛рде рдПрдХ рдЖрдЗрдХрди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд▓рд╛рдЬ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рдЙрдиреНрд╣реЗрдВ рдЯреВрд▓рдмрд╛рд░ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдмрд╣реБрдд рд╣реА рдЬрдЯрд┐рд▓ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рдХрд╕реНрдЯрдо рддрддреНрд╡ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рдиреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╕рдмрд╕реЗ рдЙрдкрдпреБрдХреНрдд рд╣реЛрдЧрд╛? рдореИрдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреВрдВрдЧрд╛ред
рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рд╕рднреА рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ, рд╕рдмрд╕реЗ рд╡рд┐рд╡рд╛рджрд╛рд╕реНрдкрдж рдкрд╣рд▓рд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдХрд╛рдлреА рднрд╛рд░реА рд▓реЛрдб рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЙрдЪрд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рд╣рдореЗрдВ рдЖрдЗрдХрди рдХреЗ рдЧрдарди рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЛ рдЫрд┐рдкрд╛рдиреЗ рдФрд░ рдкрд╣рд▓реЗ рд╕реЗ рдЧрдард┐рдд рдЫрд╡рд┐ рдХреЛ рдЯреВрд▓рдмрд╛рд░ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЖрдЗрдХрди рдХреЛ рд▓рдЧрд╛рддрд╛рд░ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рд╕реЗ рд╣рдо рдкреНрд░рджрд░реНрд╢рди рдкрд░ рдПрдХ рдЧрдВрднреАрд░ рдЭрдЯрдХрд╛ рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВред
рджреВрд╕рд░реА рд╡рд┐рдзрд┐ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИ рдЬрдм рдЖрдкрдХреЛ рдХреИрдирд╡рд╛рд╕ рдкрд░ рдХреБрдЫ рдЦреАрдВрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рддреАрд╕рд░реЗ рдФрд░ рдЪреМрдереЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╢рд╛рд╕реНрддреНрд░реАрдп рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд╣реИрдВ: рдПрдХ рдЕрд▓рдЧ рдЫрд╡рд┐ рдмрдирд╛рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдкрд╛рда рдХреНрд╖реЗрддреНрд░ рдХреЗ рдореВрд▓реНрдп рдХреЛ рдмрджрд▓рдирд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рд╣реЛрдЧрд╛ред
рдЬрдм рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рдЬрдЯрд┐рд▓ рдЧреНрд░рд╛рдлрд┐рдХ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдореИрдВ рдЖрдорддреМрд░ рдкрд░ рдЦреБрдж рд╕реЗ рдХрд╣рддрд╛ рд╣реВрдВ: "рдЕрд╕рдВрднрд╡ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИ - рдПрдХрдорд╛рддреНрд░ рд╕рд╡рд╛рд▓ рдпрд╣ рд╣реИ рдХрд┐ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рдХрд┐рддрдирд╛ рд╕рдордп рдФрд░ рдкреНрд░рдпрд╛рд╕ рдЦрд░реНрдЪ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ"ред
рдЕрдм рдЖрдкрдХреЗ рдкрд╛рд╕ рдХрд╛рд░реНрдп рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ рдФрд░ рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЖрдкрдХреЛ рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рдХрд▓реНрдк рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдХрдо рд╕рдордп рдФрд░ рдкреНрд░рдпрд╛рд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред