如何使用带有xml图标的drawableLeft?我有以下按钮:
<Button
android:id="@+id/vitimas"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:drawableLeft="@drawable/ic_person_black_24dp"
android:drawableStart="@drawable/ic_person_black_24dp"
android:background="@drawable/botao_verde"
android:text="Vítimas"/>
在旧版API(例如16)中,应用因drawableLeft
而停止工作,我尝试使用ImageButton
,但同样的情况发生,如果我使用app: srcCompat
它可行,但是图标不是留在左边,我需要它留在左边,文字在中间
图标来自矢量资产包。
答案 0 :(得分:2)
发现的最佳方式:
static public void setLeftDrawable(View view, Context c, int drawable) {
Drawable leftDrawable = AppCompatResources.getDrawable(c, drawable);
if (view instanceof TextInputEditText) {
((TextInputEditText) view).setCompoundDrawablesWithIntrinsicBounds(leftDrawable, null, null, null);
} else if (view instanceof BootstrapEditText) {
((BootstrapEditText) view).setCompoundDrawablesWithIntrinsicBounds(leftDrawable, null, null, null);
} else if (view instanceof EditText) {
((EditText) view).setCompoundDrawablesWithIntrinsicBounds(leftDrawable, null, null, null);
} else if (view instanceof TextView) {
((TextView) view).setCompoundDrawablesWithIntrinsicBounds(leftDrawable, null, null, null);
}
}
然后只需调用即可传递View,Context和Drawable,非常简单!
答案 1 :(得分:2)
AppCompatTextView now支持app:drawableTopCompat
,app:drawableRightCompat
,app:drawableBottomCompat
,app:drawableStartCompat
,app:drawableEndCompat
和{{1 }}复合可绘制对象,支持向后移植的可绘制类型,例如 VectorDrawableCompat 。
将此内容添加到您的gradle文件中
implementation 'androidx.appcompat:appcompat:1.1.0-alpha01'
您可以在文本视图中使用
app:drawableLeftCompat
app:drawableStartCompat
答案 2 :(得分:-1)
将此添加到您的gradle文件中
android {
defaultConfig {
vectorDrawables.useSupportLibrary = true
}
}
答案 3 :(得分:-1)
旧版本仍然不支持TextView
等视图中的矢量绘图。
为此,您需要使用方法setCompoundDrawablesWithIntrinsicBounds(int left, int top, int right, int bottom)
将可绘制内容添加到TextView
,CheckboxView
等。
TextView tv = findViewById(R.id.tv);
tv.setCompoundDrawablesWithIntrinsicBounds(R.drawable.icon, 0, 0, 0);
不要仅仅为了获得这种效果而嵌套视图,这对于性能和不必要都是不利的。
有关类似方法的列表,请参阅docs。
答案 4 :(得分:-1)
这里我添加了gradle的代码:
android {
defaultConfig {
vectorDrawables.useSupportLibrary = true
}
}
将此代码添加到应用程序类后:
@Override
public void onCreate() {
super.onCreate();
AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
}
之后为vector drawable创建一个图层文件:
ic_person_black.xml
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/ic_person_black_24dp"/></layer-list>
现在您可以将此文件添加到可绘制的左侧。
android:drawableLeft="@drawable/ic_person_black.xml"