Можно ли изменить цвет фона элемента меню на Android?
Пожалуйста, дайте мне знать, есть ли у кого-нибудь решение. Последним вариантом будет, очевидно, настроить его, но есть ли способ изменить цвет текста без его настройки.
Можно ли изменить цвет фона элемента меню на Android?
Пожалуйста, дайте мне знать, есть ли у кого-нибудь решение. Последним вариантом будет, очевидно, настроить его, но есть ли способ изменить цвет текста без его настройки.
Одна простая строка в вашей теме:)
<item name="android:actionMenuTextColor">@color/your_color</item>
Кажется, что
<item name="android:itemTextAppearance">@style/myCustomMenuTextAppearance</item>
в моей теме и
<style name="myCustomMenuTextAppearance" parent="@android:style/TextAppearance.Widget.IconMenu.Item">
<item name="android:textColor">@android:color/primary_text_dark</item>
</style>
в styles.xml измените стиль элементов списка, но не пунктов меню.
Вы можете легко изменить цвет текста MenuItem
, используя SpannableString
вместо String
.
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.your_menu, menu);
int positionOfMenuItem = 0; // or whatever...
MenuItem item = menu.getItem(positionOfMenuItem);
SpannableString s = new SpannableString("My red MenuItem");
s.setSpan(new ForegroundColorSpan(Color.RED), 0, s.length(), 0);
item.setTitle(s);
}
Если вы используете новую панель инструментов с темой Theme.AppCompat.Light.NoActionBar
, вы можете ее стилизовать следующим образом.
<style name="ToolbarTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:textColorPrimary">@color/my_color1</item>
<item name="android:textColorSecondary">@color/my_color2</item>
<item name="android:textColor">@color/my_color3</item>
</style>`
По результатам, которые я получил, android:textColorPrimary
- это цвет текста, отображающий имя вашей деятельности, которое является основным текстом панели инструментов. android:textColorSecondary
- цвет текста для субтитров и дополнительных опций (3 точки). (Да, он изменил свой цвет в соответствии с этим свойством!) android:textColor
- это цвет для всего другого текста, включая меню.
Наконец, установите тему на панель инструментов
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
app:theme="@style/ToolbarTheme"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:minHeight="?attr/actionBarSize"/>
Я сделал это программно следующим образом:
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.changeip_card_menu, menu);
for(int i = 0; i < menu.size(); i++) {
MenuItem item = menu.getItem(i);
SpannableString spanString = new SpannableString(menu.getItem(i).getTitle().toString());
spanString.setSpan(new ForegroundColorSpan(Color.BLACK), 0, spanString.length(), 0); //fix the color to white
item.setTitle(spanString);
}
return true;
}
Если вы используете меню как <android.support.design.widget.NavigationView />
, просто добавьте строку ниже в NavigationView
:
app:itemTextColor="your color"
Также доступен значок colorTint для значка, он также переопределит цвет для вашего значка. Для этого вам нужно добавить строку ниже:
app:itemIconTint="your color"
Пример:
<android.support.design.widget.NavigationView
android:id="@+id/nav_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
app:itemTextColor="@color/color_white"
app:itemIconTint="@color/color_white"
android:background="@color/colorPrimary"
android:fitsSystemWindows="true"
app:headerLayout="@layout/nav_header_main"
app:menu="@menu/activity_main_drawer"/>
Надеюсь, это поможет вам.
как вы можете видеть в этом вопросе, вы должны:
<item name="android:textColorPrimary">yourColor</item>
Над кодом изменяется цвет текста элементов действия меню для API >= v21.
<item name="actionMenuTextColor">@android:color/holo_green_light</item>
Выше приведен код для API < V21
Я использовал тэг html для изменения цвета текста одного элемента, когда элемент меню завышен. Надеюсь, это было бы полезно.
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
menu.findItem(R.id.main_settings).setTitle(Html.fromHtml("<font color='#ff3824'>Settings</font>"));
return true;
}
Короткий ответ: да. повезло тебе!
Для этого вам нужно переопределить некоторые стили стилей Android по умолчанию:
Сначала посмотрите на определение тем в Android:
<style name="Theme.IconMenu">
<!-- Menu/item attributes -->
<item name="android:itemTextAppearance">@android:style/TextAppearance.Widget.IconMenu.Item</item>
<item name="android:itemBackground">@android:drawable/menu_selector</item>
<item name="android:itemIconDisabledAlpha">?android:attr/disabledAlpha</item>
<item name="android:horizontalDivider">@android:drawable/divider_horizontal_bright</item>
<item name="android:verticalDivider">@android:drawable/divider_vertical_bright</item>
<item name="android:windowAnimationStyle">@android:style/Animation.OptionsPanel</item>
<item name="android:moreIcon">@android:drawable/ic_menu_more</item>
<item name="android:background">@null</item>
</style>
Итак, внешний вид текста в меню находится в @android:style/TextAppearance.Widget.IconMenu.Item
Теперь в определении стилей:
<style name="TextAppearance.Widget.IconMenu.Item" parent="TextAppearance.Small">
<item name="android:textColor">?textColorPrimaryInverse</item>
</style>
Итак, теперь у нас есть название рассматриваемого цвета, если вы посмотрите в папке цвета ресурсов системы:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_enabled="false" android:color="@android:color/bright_foreground_light_disabled" />
<item android:state_window_focused="false" android:color="@android:color/bright_foreground_light" />
<item android:state_pressed="true" android:color="@android:color/bright_foreground_light" />
<item android:state_selected="true" android:color="@android:color/bright_foreground_light" />
<item android:color="@android:color/bright_foreground_light" />
<!-- not selected -->
</selector>
Наконец, вот что вам нужно сделать:
Переопределите "TextAppearance.Widget.IconMenu.Item" и создайте свой собственный стиль. Затем свяжите его с вашим собственным селектором, чтобы сделать так, как вы хотите. Надеюсь, это поможет вам. Удачи!
Спасибо за пример кода. Мне пришлось изменить его, чтобы он работал с контекстным меню. Это мое решение.
static final Class<?>[] constructorSignature = new Class[] {Context.class, AttributeSet.class};
class MenuColorFix implements LayoutInflater.Factory {
public View onCreateView(String name, Context context, AttributeSet attrs) {
if (name.equalsIgnoreCase("com.android.internal.view.menu.ListMenuItemView")) {
try {
Class<? extends ViewGroup> clazz = context.getClassLoader().loadClass(name).asSubclass(ViewGroup.class);
Constructor<? extends ViewGroup> constructor = clazz.getConstructor(constructorSignature);
final ViewGroup view = constructor.newInstance(new Object[]{context,attrs});
new Handler().post(new Runnable() {
public void run() {
try {
view.setBackgroundColor(Color.BLACK);
List<View> children = getAllChildren(view);
for(int i = 0; i< children.size(); i++) {
View child = children.get(i);
if ( child instanceof TextView ) {
((TextView)child).setTextColor(Color.WHITE);
}
}
}
catch (Exception e) {
Log.i(TAG, "Caught Exception!",e);
}
}
});
return view;
}
catch (Exception e) {
Log.i(TAG, "Caught Exception!",e);
}
}
return null;
}
}
public List<View> getAllChildren(ViewGroup vg) {
ArrayList<View> result = new ArrayList<View>();
for ( int i = 0; i < vg.getChildCount(); i++ ) {
View child = vg.getChildAt(i);
if ( child instanceof ViewGroup) {
result.addAll(getAllChildren((ViewGroup)child));
}
else {
result.add(child);
}
}
return result;
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
LayoutInflater lInflater = getLayoutInflater();
if ( lInflater.getFactory() == null ) {
lInflater.setFactory(new MenuColorFix());
}
super.onCreateContextMenu(menu, v, menuInfo);
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.myMenu, menu);
}
Для меня это работает с Android 1.6, 2.03 и 4.03.
ПРОСТОЙ способ сделать пользовательский цвет меню для отдельной панели инструментов, а не для AppTheme
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay.MenuBlue">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"/>
</android.support.design.widget.AppBarLayout>
обычная панель инструментов на styles.xml
<style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar"/>
наш стиль пользовательской панели инструментов
<style name="AppTheme.AppBarOverlay.MenuBlue">
<item name="actionMenuTextColor">@color/blue</item>
</style>
Меню параметров в android можно настроить для установки фона или изменения внешнего вида текста. Цвет фона и текста в меню не может быть изменен с помощью тем и стилей. Исходный код Android (data\res\layout\icon_menu_item_layout.xml) использует пользовательский элемент класса "com.android.internal.view.menu.IconMenuItem" Просмотр для макета меню. Мы можем внести изменения в вышеуказанный класс, чтобы настроить меню. Для достижения этого используйте класс LayoutInflater factory и установите цвет фона и текста для представления.
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.my_menu, menu);
getLayoutInflater().setFactory(new Factory() {
@Override
public View onCreateView(String name, Context context, AttributeSet attrs) {
if (name .equalsIgnoreCase("com.android.internal.view.menu.IconMenuItemView")) {
try{
LayoutInflater f = getLayoutInflater();
final View view = f.createView(name, null, attrs);
new Handler().post(new Runnable() {
public void run() {
// set the background drawable
view .setBackgroundResource(R.drawable.my_ac_menu_background);
// set the text color
((TextView) view).setTextColor(Color.WHITE);
}
});
return view;
} catch (InflateException e) {
} catch (ClassNotFoundException e) {}
}
return null;
}
});
return super.onCreateOptionsMenu(menu);
}
Я нашел его Эврика!!
в теме приложения:
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="android:actionBarStyle">@style/ActionBarTheme</item>
<!-- backward compatibility -->
<item name="actionBarStyle">@style/ActionBarTheme</item>
</style>
вот тема вашего действия:
<style name="ActionBarTheme" parent="@style/Widget.AppCompat.Light.ActionBar.Solid.Inverse">
<item name="android:background">@color/actionbar_bg_color</item>
<item name="popupTheme">@style/ActionBarPopupTheme</item
<!-- backward compatibility -->
<item name="background">@color/actionbar_bg_color</item>
</style>
и вот ваша всплывающая тема:
<style name="ActionBarPopupTheme">
<item name="android:textColor">@color/menu_text_color</item>
<item name="android:background">@color/menu_bg_color</item>
</style>
Приветствия;)
Благодаря max.musterman это решение, которое я получил для работы на уровне 22:
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
MenuItem searchMenuItem = menu.findItem(R.id.search);
SearchView searchView = (SearchView) searchMenuItem.getActionView();
searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
searchView.setSubmitButtonEnabled(true);
searchView.setOnQueryTextListener(this);
setMenuTextColor(menu, R.id.displaySummary, R.string.show_summary);
setMenuTextColor(menu, R.id.about, R.string.text_about);
setMenuTextColor(menu, R.id.importExport, R.string.import_export);
setMenuTextColor(menu, R.id.preferences, R.string.settings);
return true;
}
private void setMenuTextColor(Menu menu, int menuResource, int menuTextResource) {
MenuItem item = menu.findItem(menuResource);
SpannableString s = new SpannableString(getString(menuTextResource));
s.setSpan(new ForegroundColorSpan(Color.BLACK), 0, s.length(), 0);
item.setTitle(s);
}
Hardcoded Color.BLACK
может стать дополнительным параметром для метода setMenuTextColor
. Кроме того, я использовал это только для пунктов меню, которые были android:showAsAction="never"
.
в Kotlin я написал эти расширения:
fun MenuItem.setTitleColor(color: Int) {
val hexColor = Integer.toHexString(color).toUpperCase().substring(2)
val html = "<font color='#$hexColor'>$title</font>"
this.title = html.parseAsHtml()
}
@Suppress("DEPRECATION")
fun String.parseAsHtml(): Spanned {
return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
Html.fromHtml(this, Html.FROM_HTML_MODE_LEGACY)
} else {
Html.fromHtml(this)
}
}
и используется так:
menu.findItem(R.id.main_settings).setTitleColor(Color.RED)
Вы можете установить цвет программно.
private static void setMenuTextColor(final Context context, final Toolbar toolbar, final int menuResId, final int colorRes) {
toolbar.post(new Runnable() {
@Override
public void run() {
View settingsMenuItem = toolbar.findViewById(menuResId);
if (settingsMenuItem instanceof TextView) {
if (DEBUG) {
Log.i(TAG, "setMenuTextColor textview");
}
TextView tv = (TextView) settingsMenuItem;
tv.setTextColor(ContextCompat.getColor(context, colorRes));
} else { // you can ignore this branch, because usually there is not the situation
Menu menu = toolbar.getMenu();
MenuItem item = menu.findItem(menuResId);
SpannableString s = new SpannableString(item.getTitle());
s.setSpan(new ForegroundColorSpan(ContextCompat.getColor(context, colorRes)), 0, s.length(), 0);
item.setTitle(s);
}
}
});
}
для изменения цвета текста пункта меню используйте код ниже
<style name="AppToolbar" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:itemTextAppearance">@style/menu_item_color</item>
</style>
где
<style name="menu_item_color">
<item name="android:textColor">@color/app_font_color</item>
</style>
Просто добавьте это в свою тему
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:itemTextAppearance">@style/AppTheme.ItemTextStyle</item>
</style>
<style name="AppTheme.ItemTextStyle" parent="@android:style/TextAppearance.Widget.IconMenu.Item">
<item name="android:textColor">@color/orange_500</item>
</style>
Протестировано по API 21
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.search, menu);
MenuItem myActionMenuItem = menu.findItem( R.id.action_search);
SearchView searchView = (SearchView) myActionMenuItem.getActionView();
EditText searchEditText = (EditText) searchView.findViewById(android.support.v7.appcompat.R.id.search_src_text);
searchEditText.setTextColor(Color.WHITE); //You color here
Моя ситуация была с настройками цвета текста в меню настроек (главное меню приложения показывалось при нажатии кнопки меню).
Протестировано в API 16 с библиотекой appcompat-v7-27.0.2, темами AppCompatActivity
for MainActivity
и AppCompat
для приложения в AndroidManifest.xml.
styles.xml:
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="actionBarPopupTheme">@style/PopupTheme</item>
</style>
<style name="PopupTheme" parent="@style/ThemeOverlay.AppCompat.Light">
<item name="android:textColorSecondary">#f00</item>
</style>
Не знаю, влияет ли этот textColorSecondary
на другие элементы, но он контролирует цвет текста меню.
Я искал несколько примеров по этой теме, но все готовые к использованию фрагменты не работали.
Поэтому я хотел исследовать его с помощью исходного кода для библиотеки appcompat-v7 (в частности, с папкой res пакета .aar).
Хотя в моем случае я использовал Eclipse с разнесенными зависимостями .aar. Так что я мог бы изменить стили по умолчанию и проверить результаты. Не знаю, как взорвать библиотеки для использования с Gradle или Android Studio напрямую. Это заслуживает другого потока исследования.
Таким образом, моя цель состояла в том, чтобы найти какой цвет в файле res/values /values.xml используется для текста меню (я был почти уверен, что цвет был там).
#f00
.secondary_text_default_material_light
цвета элементом.@color/abc_secondary_text_material_light
.Base.ThemeOverlay.AppCompat.Light
и Platform.AppCompat.Light
.android:textColorSecondary
и android:textColorTertiary
в Base.ThemeOverlay.AppCompat.Light
.android:textColorSecondary
.Theme.AppCompat.Light
а не ThemeOverlay.AppCompat.Light
).Base.ThemeOverlay.AppCompat.Light
. У него был ребенок ThemeOverlay.AppCompat.Light
.ThemeOverlay.AppCompat.Light
я нашел его использование в теме Base.Theme.AppCompat.Light.DarkActionBar
в качестве actionBarPopupTheme
атрибута actionBarPopupTheme
.Theme.AppCompat.Light.DarkActionBar
была дочерней для найденного Base.Theme.AppCompat.Light.DarkActionBar
поэтому я мог без проблем использовать этот атрибут в моем файле styles.xml.ThemeOverlay.AppCompat.Light
тему из упомянутого ThemeOverlay.AppCompat.Light
и изменил атрибут android:textColorSecondary
.Sephy solution не работает. Можно переопределить внешний вид элемента меню опций, используя метод, описанный выше, но не элемент или меню. Для этого есть 3 способа:
См. Проблема 4441: Тема меню дополнительных опций для получения дополнительных сведений.
попробуйте этот код....
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.my_menu, menu);
getLayoutInflater().setFactory(new Factory() {
@Override
public View onCreateView(String name, Context context,
AttributeSet attrs) {
if (name.equalsIgnoreCase("com.android.internal.view.menu.IconMenuItemView")) {
try {
LayoutInflater f = getLayoutInflater();
final View view = f.createView(name, null, attrs);
new Handler().post(new Runnable() {
public void run() {
// set the background drawable
view.setBackgroundResource(R.drawable.my_ac_menu_background);
// set the text color
((TextView) view).setTextColor(Color.WHITE);
}
});
return view;
} catch (InflateException e) {
} catch (ClassNotFoundException e) {
}
}
return null;
}
});
return super.onCreateOptionsMenu(menu);
}
Добавление этого в мой styles.xml работало для меня
<item name="android:textColorPrimary">?android:attr/textColorPrimaryInverse</item>
Вот как вы можете покрасить определенный элемент меню с цветом, работает для всех уровней API:
public static void setToolbarMenuItemTextColor(final Toolbar toolbar,
final @ColorRes int color,
@IdRes final int resId) {
if (toolbar != null) {
for (int i = 0; i < toolbar.getChildCount(); i++) {
final View view = toolbar.getChildAt(i);
if (view instanceof ActionMenuView) {
final ActionMenuView actionMenuView = (ActionMenuView) view;
// view children are accessible only after layout-ing
actionMenuView.post(new Runnable() {
@Override
public void run() {
for (int j = 0; j < actionMenuView.getChildCount(); j++) {
final View innerView = actionMenuView.getChildAt(j);
if (innerView instanceof ActionMenuItemView) {
final ActionMenuItemView itemView = (ActionMenuItemView) innerView;
if (resId == itemView.getId()) {
itemView.setTextColor(ContextCompat.getColor(toolbar.getContext(), color));
}
}
}
}
});
}
}
}
}
Делая это, вы теряете эффект селектора фонового рисунка, поэтому здесь приведен код для применения настраиваемого селектора фона ко всем дочерним элементам меню.
public static void setToolbarMenuItemsBackgroundSelector(final Context context,
final Toolbar toolbar) {
if (toolbar != null) {
for (int i = 0; i < toolbar.getChildCount(); i++) {
final View view = toolbar.getChildAt(i);
if (view instanceof ImageButton) {
// left toolbar icon (navigation, hamburger, ...)
UiHelper.setViewBackgroundSelector(context, view);
} else if (view instanceof ActionMenuView) {
final ActionMenuView actionMenuView = (ActionMenuView) view;
// view children are accessible only after layout-ing
actionMenuView.post(new Runnable() {
@Override
public void run() {
for (int j = 0; j < actionMenuView.getChildCount(); j++) {
final View innerView = actionMenuView.getChildAt(j);
if (innerView instanceof ActionMenuItemView) {
// text item views
final ActionMenuItemView itemView = (ActionMenuItemView) innerView;
UiHelper.setViewBackgroundSelector(context, itemView);
// icon item views
for (int k = 0; k < itemView.getCompoundDrawables().length; k++) {
if (itemView.getCompoundDrawables()[k] != null) {
UiHelper.setViewBackgroundSelector(context, itemView);
}
}
}
}
}
});
}
}
}
}
Вот также вспомогательная функция:
public static void setViewBackgroundSelector(@NonNull Context context, @NonNull View itemView) {
int[] attrs = new int[]{R.attr.selectableItemBackgroundBorderless};
TypedArray ta = context.obtainStyledAttributes(attrs);
Drawable drawable = ta.getDrawable(0);
ta.recycle();
ViewCompat.setBackground(itemView, drawable);
}
Для изменения цвета текста вы можете просто настроить собственное представление для MenuItem, а затем вы можете определить цвет текста.
Пример кода: MenuItem.setActionView()
Если вы хотите установить цвет для отдельного пункта меню, настройка темы панели инструментов не является правильным решением. Для этого вы можете использовать android: actionLayout и представление действий для пункта меню.
Сначала создайте файл макета XML для вида действия. В этом примере мы используем кнопку в качестве вида действия:
menu_button.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:id="@+id/menuButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Done"
android:textColor="?android:attr/colorAccent"
style="?android:attr/buttonBarButtonStyle"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
В приведенном выше фрагменте кода мы используем android:textColor="?android:attr/colorAccent"
для настройки цвета текста кнопки.
Затем в свой XML файл макета для меню включите app:actionLayout="@layout/menu_button"
, как показано ниже:
main_menu.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/menuItem"
android:title=""
app:actionLayout="@layout/menu_button"
app:showAsAction="always"/>
</menu>
Последнее переопределение метода onCreateOptionsMenu()
в вашей активности:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main_menu, menu);
MenuItem item = menu.findItem(R.id.menuItem);
Button saveButton = item.getActionView().findViewById(R.id.menuButton);
button.setOnClickListener(view -> {
// Do something
});
return true;
}
... или фрагмент:
@Override
public void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater){
inflater.inflate(R.menu.main_menu, menu);
MenuItem item = menu.findItem(R.id.menuItem);
Button saveButton = item.getActionView().findViewById(R.id.menuButton);
button.setOnClickListener(view -> {
// Do something
});
}
Подробнее о видах действий см. в руководстве разработчика Android.