App Compat支持库包中包含可以包含在应用程序中的几个库。这些库中的每一个都支持特定范围的Android平台版本和一组功能。
我在我的应用程序中使用外部库。该示例中使用的第一个参数是“this”。这是指 appcompat 活动。但是我在一个显然不会扩展的片段中使用它
有关 gradle 构建和 appcompat 的错误出现在 flutter 中
任务“:app:mergeExtDexDebug”执行失败。 无法解析配置“:app:debugRuntimeClasspath”的所有文件。 raryelements=aar, org.gradle.status=release, org.gradle.usage=java-ru...
Android 12 忽略 showSoftInput,因为未提供 VIEW 服务
我的应用程序在很多设备上运行良好。但自从在我自己的 Pixel 上升级到 Android 12 后,调用 showSoftInput 或点击 Bottomshee 中的 AppCompatEditText 时会发生以下情况...
使用 android_alarm_manager_plus 构建 Flutter 项目时出现奇怪错误
我创建了一个空的 Flutter 项目,将 android_alarm_manager_plus 添加到 pubspec.yaml 中,但是当我尝试构建应用程序时,收到此错误: 注意:C:\Users\ALEX\AppData\Local\Pub\Cache\hosted\pub.dev\
Rtl 对AppCompatEditText Android 的drawableEnd 的支持
我像这样使用这个AppCompatEditText 我正在像这样使用这个AppCompatEditText <com.google.android.material.textfield.TextInputLayout android:id="@+id/tilCountry" style="@style/LoginTextInputLayoutStyle" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginStart="@dimen/dpSixteen" android:layout_marginEnd="@dimen/dpSixteen" android:layout_marginBottom="@dimen/dpTwenty" android:background="@null" android:hint="@string/chooseCountry" app:hintTextAppearance="@style/TextAppearance.App.TextInputLayout" app:hintTextColor="@color/moonRaker"> <androidx.appcompat.widget.AppCompatEditText android:id="@+id/etCountry" android:layout_width="match_parent" android:layout_height="wrap_content" android:drawableEnd="@drawable/ic_blue_right" android:drawableTint="@color/blue" android:focusable="true" android:imeOptions="actionNext" android:textAppearance="@style/SignupEditText" tools:targetApi="m" /> </com.google.android.material.textfield.TextInputLayout> 当用户将语言更改为阿拉伯语时,rtl 看起来一切都很好,但是 drawableEnd 不从右到左改变。 选择带有镜像效果的阿拉伯语时,箭头必须切换到左侧。 我的可绘制代码 <vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="7.41dp" android:height="12dp" android:viewportWidth="7.41" android:viewportHeight="12" **android:autoMirrored="true"**> <path android:pathData="M0,10.58 L4.58,6 0,1.41 1.41,0l6,6 -6,6Z" android:fillColor="#1b47db"/> </vector> 这里出了什么问题? 如果语言是阿拉伯语,则Drawable应从头开始设置,否则应从末尾开始设置。 etCountry.setCompoundDrawablesWithIntrinsicBounds(0, 0, @drawable/ic_blue_right, 0); //Right side drawable etCountry.setCompoundDrawablesWithIntrinsicBounds(@drawable/ic_blue_right, 0, 0, 0); //Left side drawable 试试这个方法
由于空指针异常,任务“:app:mergeExtDexDebug”执行失败
我正在制作一个在android studio中显示PDF的应用程序,它加载文件,然后通过外部库显示它们我还没有完全实现显示功能,主要是由于...
AppCompat 现在是否需要 minSdKVersion >= 21?
我的应用程序的 minSdkVersion 为 19 并使用 AppCompat。这在 AppCompat 版本 1.6.1 中运行良好,但在 1.7.0 中,该应用程序无法构建(在 Android Studio 中): 清单合并失败:使用-...
当我将 AppCompat 库中的可绘制对象用于工具栏菜单项时,着色会按预期工作。像这样: 当我将 AppCompat 库中的可绘制对象用于我的 Toolbar 菜单项时,着色会按预期工作。像这样: <item android:id="@+id/action_clear" android:icon="@drawable/abc_ic_clear_mtrl_alpha" <-- from AppCompat android:title="@string/clear" /> 但是,如果我使用自己的可绘制对象,或者实际上将可绘制对象从 AppCompat 库复制到我自己的项目中,它根本不会着色。 <item android:id="@+id/action_clear" android:icon="@drawable/abc_ic_clear_mtrl_alpha_copy" <-- copy from AppCompat android:title="@string/clear" /> AppCompatToolbar中是否有一些特殊的魔法只能为该库中的可绘制对象着色?有什么方法可以让它与我自己的绘图一起使用吗? 使用 compileSdkVersion = 21 和 targetSdkVersion = 21 在 API 级别 19 设备上运行此程序,并使用 AppCompat 中的所有内容 abc_ic_clear_mtrl_alpha_copy 是 abc_ic_clear_mtrl_alpha 中的 AppCompat png 的精确副本 编辑: 着色基于我在主题中为 android:textColorPrimary 设置的值。 例如<item name="android:textColorPrimary">#00FF00</item>会给我一种绿色色调。 截图 使用 AppCompat 的可绘制对象按预期进行着色 着色不适用于从 AppCompat 复制的可绘制对象 在新的支持库v22.1之后,您可以使用类似这样的东西: @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_home, menu); Drawable drawable = menu.findItem(R.id.action_clear).getIcon(); drawable = DrawableCompat.wrap(drawable); DrawableCompat.setTint(drawable, ContextCompat.getColor(this,R.color.textColorPrimary)); menu.findItem(R.id.action_clear).setIcon(drawable); return true; } app:iconTint 属性在支持库中的 SupportMenuInflater 中实现(至少在 28.0.0 中)。 已使用 API 15 及更高版本成功测试。 菜单资源文件: <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <item android:id="@+id/menu_settings" android:icon="@drawable/ic_settings_white_24dp" app:iconTint="?attr/appIconColorEnabled" <!-- using app name space instead of android --> android:menuCategory="system" android:orderInCategory="1" android:title="@string/menu_settings" app:showAsAction="never" /> <item android:id="@+id/menu_themes" android:icon="@drawable/ic_palette_white_24dp" app:iconTint="?attr/appIconColorEnabled" android:menuCategory="system" android:orderInCategory="2" android:title="@string/menu_themes" app:showAsAction="never" /> <item android:id="@+id/action_help" android:icon="@drawable/ic_help_white_24dp" app:iconTint="?attr/appIconColorEnabled" android:menuCategory="system" android:orderInCategory="3" android:title="@string/menu_help" app:showAsAction="never" /> </menu> (在本例中,?attr/appIconColorEnabled是应用程序主题中的自定义颜色属性,图标资源是矢量绘图。) 在 ColorFilter 上设置 MenuItem(色调)很简单。这是一个例子: Drawable drawable = menuItem.getIcon(); if (drawable != null) { // If we don't mutate the drawable, then all drawable's with this id will have a color // filter applied to it. drawable.mutate(); drawable.setColorFilter(color, PorterDuff.Mode.SRC_ATOP); drawable.setAlpha(alpha); } 如果您想支持不同的主题并且不想仅仅为了颜色或透明度而有额外的副本,上面的代码非常有帮助。 单击此处获取帮助程序类,以在菜单中的所有可绘制对象上设置ColorFilter,包括溢出图标。 在 onCreateOptionsMenu(Menu menu) 中,只需在扩充菜单后致电 MenuColorizer.colorMenu(this, menu, color); 即可;瞧;你的图标有颜色。 因为如果你看一下AppCompat中TintManager的源代码,你会看到: /** * Drawables which should be tinted with the value of {@code R.attr.colorControlNormal}, * using the default mode. */ private static final int[] TINT_COLOR_CONTROL_NORMAL = { R.drawable.abc_ic_ab_back_mtrl_am_alpha, R.drawable.abc_ic_go_search_api_mtrl_alpha, R.drawable.abc_ic_search_api_mtrl_alpha, R.drawable.abc_ic_commit_search_api_mtrl_alpha, R.drawable.abc_ic_clear_mtrl_alpha, R.drawable.abc_ic_menu_share_mtrl_alpha, R.drawable.abc_ic_menu_copy_mtrl_am_alpha, R.drawable.abc_ic_menu_cut_mtrl_alpha, R.drawable.abc_ic_menu_selectall_mtrl_alpha, R.drawable.abc_ic_menu_paste_mtrl_am_alpha, R.drawable.abc_ic_menu_moreoverflow_mtrl_alpha, R.drawable.abc_ic_voice_search_api_mtrl_alpha, R.drawable.abc_textfield_search_default_mtrl_alpha, R.drawable.abc_textfield_default_mtrl_alpha }; /** * Drawables which should be tinted with the value of {@code R.attr.colorControlActivated}, * using the default mode. */ private static final int[] TINT_COLOR_CONTROL_ACTIVATED = { R.drawable.abc_textfield_activated_mtrl_alpha, R.drawable.abc_textfield_search_activated_mtrl_alpha, R.drawable.abc_cab_background_top_mtrl_alpha }; /** * Drawables which should be tinted with the value of {@code android.R.attr.colorBackground}, * using the {@link android.graphics.PorterDuff.Mode#MULTIPLY} mode. */ private static final int[] TINT_COLOR_BACKGROUND_MULTIPLY = { R.drawable.abc_popup_background_mtrl_mult, R.drawable.abc_cab_background_internal_bg, R.drawable.abc_menu_hardkey_panel_mtrl_mult }; /** * Drawables which should be tinted using a state list containing values of * {@code R.attr.colorControlNormal} and {@code R.attr.colorControlActivated} */ private static final int[] TINT_COLOR_CONTROL_STATE_LIST = { R.drawable.abc_edit_text_material, R.drawable.abc_tab_indicator_material, R.drawable.abc_textfield_search_material, R.drawable.abc_spinner_mtrl_am_alpha, R.drawable.abc_btn_check_material, R.drawable.abc_btn_radio_material }; /** * Drawables which contain other drawables which should be tinted. The child drawable IDs * should be defined in one of the arrays above. */ private static final int[] CONTAINERS_WITH_TINT_CHILDREN = { R.drawable.abc_cab_background_top_material }; 这几乎意味着他们将特定的资源ID列入白名单以进行着色。 但我想你总能看到他们如何对这些图像进行着色并做同样的事情。就像在可绘制对象上设置 ColorFilter 一样简单。 我个人更喜欢这个方法link 使用以下内容创建 XML 布局: <?xml version="1.0" encoding="utf-8"?> <bitmap xmlns:android="http://schemas.android.com/apk/res/android" android:src="@drawable/ic_action_something" android:tint="@color/color_action_icons_tint"/> 并从菜单中引用此绘图: <item android:id="@+id/option_menu_item_something" android:icon="@drawable/ic_action_something_tined" 本线程中的大多数解决方案要么使用更新的 API,要么使用反射,或者使用密集视图查找来获取膨胀的 MenuItem。 但是,有一种更优雅的方法可以做到这一点。您需要一个自定义工具栏,因为您的“应用自定义色调”用例与公共样式/主题 API 不能很好地配合。 public class MyToolbar extends Toolbar { ... some constructors, extracting mAccentColor from AttrSet, etc @Override public void inflateMenu(@MenuRes int resId) { super.inflateMenu(resId); Menu menu = getMenu(); for (int i = 0; i < menu.size(); i++) { MenuItem item = menu.getItem(i); Drawable icon = item.getIcon(); if (icon != null) { item.setIcon(applyTint(icon)); } } } void applyTint(Drawable icon){ icon.setColorFilter( new PorterDuffColorFilter(mAccentColor, PorterDuff.Mode.SRC_IN) ); } } 只需确保调用您的 Activity/Fragment 代码即可: toolbar.inflateMenu(R.menu.some_menu); toolbar.setOnMenuItemClickListener(someListener); 没有反射,没有视图查找,也没有那么多代码,是吧? 现在你可以忽略荒谬的onCreateOptionsMenu/onOptionsItemSelected。 这是我使用的解决方案;您可以在 onPrepareOptionsMenu() 或等效位置之后调用它。 mutate() 的原因是如果您碰巧在多个位置使用图标;如果没有变异,它们都会呈现相同的色调。 public class MenuTintUtils { public static void tintAllIcons(Menu menu, final int color) { for (int i = 0; i < menu.size(); ++i) { final MenuItem item = menu.getItem(i); tintMenuItemIcon(color, item); tintShareIconIfPresent(color, item); } } private static void tintMenuItemIcon(int color, MenuItem item) { final Drawable drawable = item.getIcon(); if (drawable != null) { final Drawable wrapped = DrawableCompat.wrap(drawable); drawable.mutate(); DrawableCompat.setTint(wrapped, color); item.setIcon(drawable); } } private static void tintShareIconIfPresent(int color, MenuItem item) { if (item.getActionView() != null) { final View actionView = item.getActionView(); final View expandActivitiesButton = actionView.findViewById(R.id.expand_activities_button); if (expandActivitiesButton != null) { final ImageView image = (ImageView) expandActivitiesButton.findViewById(R.id.image); if (image != null) { final Drawable drawable = image.getDrawable(); final Drawable wrapped = DrawableCompat.wrap(drawable); drawable.mutate(); DrawableCompat.setTint(wrapped, color); image.setImageDrawable(drawable); } } } } } 这不会解决溢出问题,但为此,你可以这样做: 布局: <android.support.v7.widget.Toolbar ... android:theme="@style/myToolbarTheme" /> 款式: <style name="myToolbarTheme"> <item name="colorControlNormal">#FF0000</item> </style> 这适用于 appcompat v23.1.0。 这对我有用: override fun onCreateOptionsMenu(menu: Menu?): Boolean { val inflater = menuInflater inflater.inflate(R.menu.player_menu, menu) //tinting menu item: val typedArray = theme.obtainStyledAttributes(IntArray(1) { android.R.attr.textColorSecondary }) val textColor = typedArray.getColor(0, 0) typedArray.recycle() val item = menu?.findItem(R.id.action_chapters) val icon = item?.icon icon?.setColorFilter(textColor, PorterDuff.Mode.SRC_IN); item?.icon = icon return true } 或者你可以在drawable xml中使用tint: <vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="24dp" android:height="24dp" android:tint="?android:textColorSecondary" android:viewportWidth="384" android:viewportHeight="384"> <path android:fillColor="#FF000000" android:pathData="M0,277.333h384v42.667h-384z" /> <path android:fillColor="#FF000000" android:pathData="M0,170.667h384v42.667h-384z" /> <path android:fillColor="#FF000000" android:pathData="M0,64h384v42.667h-384z" /> </vector> @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_home, menu); //One item tint menu.get(itemId).getIcon().setTint(Color); //or all for(int i=0;i<menu.size();i++){ menu.get(i).getIcon().setTint(Color); } return true; } 我发现当我使用 android:iconTint 属性时,菜单项的颜色应用在设计预览中,但没有应用在应用程序中。但是,使用 app:iconTint 应用应用程序中的颜色,而不是设计预览中的颜色。
图像未加载到扩展 AppCompatImageView 的自定义视图类中
我设计了一个名为 PaintView 的自定义类。我的目标是加载用户选择的图像并允许用户像画笔一样绘画或在其上放置不同的形状。 这是我的实现方式...
我的布局看起来有点像这样: ...
如何在 Android Kitkat 中调整 AppCompatRadioButton 的 DrawableLeft 大小?
在 Xamarin Android 应用程序中,我有一个 AppCompatRadioButton,其 drawableLeft 属性设置为 @drawable/person_resized: 在 Xamarin Android 应用程序中,我有一个 AppCompatRadioButton,其 drawableLeft 属性设置为 @drawable/person_resized: <RadioGroup android:layout_width="match_parent" android:layout_height="wrap_content"> <android.support.v7.widget.AppCompatRadioButton android:id="@+id/MyRadioButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Selection 1" android:textSize="24dp" android:drawableLeft="@drawable/person_resized" android:drawablePadding="5dp" /> </RadioGroup> drawable/person_resized.xml 是一个图层列表可绘制对象,我用它来缩小 drawable/person.png 图像: <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/person" android:width="22dp" android:height="22dp" /> </layer-list> 当此视图显示在 Android N 模拟器上时,它的行为正常。 但是在我的 Android Kitkat(4.4.4) 设备中,图像大小不正确。 这是我在 Android N 中得到的: 这是我在 Android Kitkat 中得到的: 这是怎么回事? 我尝试了以下方法来缩小 Android Kitkat 中的 drawableLeft 的大小,但 都不起作用: 使用ScaleDrawable缩小可绘制对象,同时确保SetLevel,这实际上允许调整可绘制对象的大小,但不受控制;无论我提供什么缩放系数,调整大小的图像始终是相同的较小尺寸 从可绘制对象中获取位图,调整其大小并创建一个新的位图可绘制对象,但这会使图像消失 使用插入可绘制对象,与使用图层列表相同,使图像以其原始大小显示 根据Mahmoud Mortda指出的这个答案,Android Kitkat 中的一些功能障碍导致图层列表调整大小被忽略。 所以基本上你必须自己做,以下是我所做的: 我创建了两个文件 layout-v21/radio_group.xml 和 layout/radio_group.xml,前者将用于运行至少 Lollipop (SDK 21) 的 Android 设备,后者将用于包括 KitKat 在内的其余设备。 layout-v21/radio_group.xml 包含通过 RadioGroup 调整大小的图像的 layer-list: <?xml version="1.0" encoding="utf-8"?> <RadioGroup xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content"> <android.support.v7.widget.AppCompatRadioButton android:id="@+id/MyRadioButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Selection 1" android:textSize="24dp" android:drawableLeft="@drawable/person_resized" android:drawablePadding="5dp" /> </RadioGroup> layout/radio_group.xml 包含一个 RadioGroup,带有由 ImageView 和 TextView 制成的“手工制作”标签: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content"> <RadioGroup android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_centerVertical="true" android:id="@+id/RadGroup"> <android.support.v7.widget.AppCompatRadioButton android:id="@+id/MyRadioButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="24dp" /> </RadioGroup> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" android:layout_toRightOf="@+id/RadGroup" android:layout_centerVertical="true"> <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <ImageView android:id="@+id/icon" android:layout_width="22dp" android:layout_height="22dp" android:src="@drawable/person" android:layout_alignParentLeft="true" android:layout_centerVertical="true" /> <TextView android:id="@+id/label1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="5dp" android:layout_toRightOf="@+id/icon" android:layout_centerVertical="true" android:textSize="24dp" android:textColor="@color/black" android:text="Selection 1" /> </RelativeLayout> </RelativeLayout> 这里使用 ImageView 让我可以有效地调整图像大小。 最后,在包含 RadioGroup 的 xml 布局中,只需包含 @layout/radio_group,SDK 将加载针对 Android 版本的正确布局: <include layout="@layout/radio_group"/> 添加RadioButton。 <androidx.appcompat.widget.AppCompatRadioButton android:id="@+id/dialog_pedido_item_produto_desconto_radio_button_desconto" android:layout_width="wrap_content" android:layout_height="wrap_content" android:buttonTint="@color/red_600" android:bufferType="spannable" android:gravity="center" android:drawableStart="@drawable/ic_arrow_downward_red_24dp" android:checked="true" android:padding="@dimen/dp_5" android:text="Desconto" />
如何在Android Studio 4.1中隐藏Action Bar?
我使用的是Android Studio 4.1,我想隐藏操作栏。我搜索了堆栈溢出,但自 getActi 以来,2020 年 10 月的 Android Studio 更新中似乎引入了一些新方法...
如何在没有 AppCompatDelegate 的情况下以编程方式设置 Jetpack Compose 中的语言?
我正在尝试在我的 Jetpack Compose 应用程序中实现语言选择功能。但是,在尝试使用 AppCompactDelegate 来实现此目的时,我遇到了障碍。看来
如何使用 AppCompatDelegate 防止 Jetpack Compose 中区域设置更改时屏幕“闪烁”?
在本文之后,我为我的 Compose 应用程序添加了应用程序内语言选择器。 但每次我更改语言时屏幕都会闪烁。我猜这是由于配置更改造成的 我下载了样本...
Android Google Pay API PayButton 在几秒钟后变得不可见
我正在尝试将 Google Pay API 的本机 PayButton 与我的 React Native 应用程序集成,我认为这个 Android React Native 桥一切都很好: 公共类 GooglePayButtonManager 扩展...
Android Studio build.gradle 错误
当我创建一个新项目时,出现错误: 错误:无法解决:androidx.appcompat:appcompat:1.6.1 添加 Google Maven 存储库并同步项目 在项目结构对话框中显示 受影响的莫杜...
注释 @RequiresApi 对于要求仅在给定的 API 级别或更高级别上调用带注释的元素很有帮助。然而,似乎没有对应的注释
在 Android 13+ 中无法为 BottomSheetDialogFragment 设置 dimAmount
BottomSheetDialogFragment仅接受1.0f的dipAmount(非透明黑色背景),0.99f及以下是完全透明的背景,这似乎只影响API 33+。样式.xml
Android - app:drawableStartCompat 显示错误的颜色
我使用下面的TextView: 我使用下面的TextView: <TextView android:id="@+id/btnBack" style="@style/TextNormal" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_gravity="center_vertical" android:background="?selectableItemBackgroundBorderless" android:padding="@dimen/_8sdp" android:text="@string/common_back" android:textColor="@android:color/white" app:drawableStartCompat="@drawable/ic_back" /> 风格TextNormal <style name="TextNormal"> <item name="android:textColor">@color/colorTextPrimary</item> <item name="android:textColorHint">@color/colorTextSecondary</item> <item name="android:textSize">@dimen/text_normal</item> <item name="android:textStyle">normal</item> </style> icon_back.xml <vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="24dp" android:height="24dp" android:viewportWidth="48" android:viewportHeight="48"> <path android:fillColor="#ffffff" android:fillType="evenOdd" android:pathData="M35.556,6.828L17.901,24.484L34.994,41.733L32.176,44.55L12,24.556L15,21.556L15.085,21.643L32.728,4L35.556,6.828Z" /> </vector> XML 文件drawable/ic_back 的颜色为白色。但是在显示时,该图像显示错误的颜色,它不是白色,it same with color primary,所以用户看不到它。 设计: 在设备上运行: 你知道这个bug吗,请帮助我。 我最近遇到了类似的问题。就我而言,我创建的自定义对话框在活动 A 中显示图标,但当转换到活动 B 时,该图标不再可见。我发现问题是 Activity B 不是 AppCompatActivity。属性 app:drawableStartCompat 仅在 AppCompatTextView 中处理,而不在 TextView 中处理。 AppCompatActivity 自动将 TextView 从 XML 转换为 AppCompatTextView。 您可能想通过以下方式验证这一点: 将 app:drawableStartCompat 替换为 android:drawableStart 并确认是否显示。 通过debug或者Log打印来确认实例是TextView还是AppCompatTextView。 如果结果是显示为 android:drawableStart 并且实例是 TextView,那么这可能是问题的原因。
Gradle 错误:无法解析 androidx.appcompat:appcompat:1.0.0
我在使用 Gradle 的 Flutter 项目中尝试解决 androidx.appcompat:appcompat:1.3.0 依赖项时遇到问题。错误消息指出: 无法确定依赖关系...